<!DOCTYPE html>
<html>
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
	<meta name="generator" content="ApiGen; http://apigen.org" />
	<meta name="robots" content="noindex" />

	<title>Application\Presenter.php</title>

	<link rel="stylesheet" href="resources/style.css?v=2011071314" type="text/css" media="all" />
	<link rel="shortcut icon" href="/favicon.ico" type="image/x-icon" />
	<link rel="search" href="opensearch.xml" type="application/opensearchdescription+xml" title="Nette Framework API documentation" />
	<script type="text/javascript" src="resources/combined.js"></script>
	<script type="text/javascript" src="allclasses.js"></script>
</head>

<body>
<div id="left">
	<a href="allclasses.html">All Classes</a>

	<h3>Namespaces</h3>
	<ul>
		<li><a href="namespace-none.html">none</a>
		</li>
		<li><a href="namespace-Nette.html">Nette</a>
		</li>
		<li class="active"><a href="namespace-Nette.Application.html">Nette\Application</a>
		</li>
		<li><a href="namespace-Nette.Caching.html">Nette\Caching</a>
		</li>
		<li><a href="namespace-Nette.Collections.html">Nette\Collections</a>
		</li>
		<li><a href="namespace-Nette.Config.html">Nette\Config</a>
		</li>
		<li><a href="namespace-Nette.Forms.html">Nette\Forms</a>
		</li>
		<li><a href="namespace-Nette.IO.html">Nette\IO</a>
		</li>
		<li><a href="namespace-Nette.Loaders.html">Nette\Loaders</a>
		</li>
		<li><a href="namespace-Nette.Mail.html">Nette\Mail</a>
		</li>
		<li><a href="namespace-Nette.Reflection.html">Nette\Reflection</a>
		</li>
		<li><a href="namespace-Nette.Security.html">Nette\Security</a>
		</li>
		<li><a href="namespace-Nette.Templates.html">Nette\Templates</a>
		</li>
		<li><a href="namespace-Nette.Web.html">Nette\Web</a>
		</li>
		<li><a href="namespace-PHP.html">PHP</a>
		</li>
	</ul>

	<hr />

	<h3>Classes</h3>

	<ul>
		<li><a href="Nette.Application.AppForm.html">AppForm</a></li>
		<li><a href="Nette.Application.Application.html">Application</a></li>
		<li><a href="Nette.Application.CliRouter.html">CliRouter</a></li>
		<li><a href="Nette.Application.Control.html">Control</a></li>
		<li><a href="Nette.Application.DownloadResponse.html">DownloadResponse</a></li>
		<li><a href="Nette.Application.ForwardingResponse.html">ForwardingResponse</a></li>
		<li><a href="Nette.Application.JsonResponse.html">JsonResponse</a></li>
		<li><a href="Nette.Application.Link.html">Link</a></li>
		<li><a href="Nette.Application.MultiRouter.html">MultiRouter</a></li>
		<li class="active"><a href="Nette.Application.Presenter.html">Presenter</a></li>
		<li><a href="Nette.Application.PresenterComponent.html">PresenterComponent</a></li>
		<li><a href="Nette.Application.PresenterLoader.html">PresenterLoader</a></li>
		<li><a href="Nette.Application.PresenterRequest.html">PresenterRequest</a></li>
		<li><a href="Nette.Application.RedirectingResponse.html">RedirectingResponse</a></li>
		<li><a href="Nette.Application.RenderResponse.html">RenderResponse</a></li>
		<li><a href="Nette.Application.Route.html">Route</a></li>
		<li><a href="Nette.Application.SimpleRouter.html">SimpleRouter</a></li>
	</ul>

	<h3>Interfaces</h3>

	<ul>
		<li><a href="Nette.Application.IPartiallyRenderable.html">IPartiallyRenderable</a></li>
		<li><a href="Nette.Application.IPresenter.html">IPresenter</a></li>
		<li><a href="Nette.Application.IPresenterLoader.html">IPresenterLoader</a></li>
		<li><a href="Nette.Application.IPresenterResponse.html">IPresenterResponse</a></li>
		<li><a href="Nette.Application.IRenderable.html">IRenderable</a></li>
		<li><a href="Nette.Application.IRouter.html">IRouter</a></li>
		<li><a href="Nette.Application.ISignalReceiver.html">ISignalReceiver</a></li>
		<li><a href="Nette.Application.IStatePersistent.html">IStatePersistent</a></li>
	</ul>

	<h3>Exceptions</h3>

	<ul>
		<li><a href="Nette.Application.AbortException.html">AbortException</a></li>
		<li><a href="Nette.Application.ApplicationException.html">ApplicationException</a></li>
		<li><a href="Nette.Application.BadRequestException.html">BadRequestException</a></li>
		<li><a href="Nette.Application.BadSignalException.html">BadSignalException</a></li>
		<li><a href="Nette.Application.ForbiddenRequestException.html">ForbiddenRequestException</a></li>
		<li><a href="Nette.Application.InvalidLinkException.html">InvalidLinkException</a></li>
		<li><a href="Nette.Application.InvalidPresenterException.html">InvalidPresenterException</a></li>
	</ul>
</div>

<div id="right">
	<form action="http://www.google.com/cse" id="search" onsubmit="if(this.q.value.indexOf('more:')==-1)this.q.value+=' more:api'">
		<input type="hidden" name="cx" value="011549293477758430224:vxofa9ufnhc" /><input type="hidden" name="ie" value="UTF-8" /><input type="text" name="q" class="text" /><input type="submit" value="Search" />
	</form>

<div id="navigation">
	<ul>
		<li><a href="overview.html" title="Summary of all namespaces">Overview</a></li>
		<li><a href="elements.html">Elements</a></li>
	</ul>
</div>

<pre><code><a href="#1" id="1" class="l">   1: </a><span class="xlang">&lt;?php</span>
<a href="#2" id="2" class="l">   2: </a>
<a href="#3" id="3" class="l">   3: </a><span class="php-comment">/**
</span><a href="#4" id="4" class="l">   4: </a><span class="php-comment"> * This file is part of the Nette Framework (http://nette.org)
</span><a href="#5" id="5" class="l">   5: </a><span class="php-comment"> *
</span><a href="#6" id="6" class="l">   6: </a><span class="php-comment"> * Copyright (c) 2004, 2010 David Grudl (http://davidgrudl.com)
</span><a href="#7" id="7" class="l">   7: </a><span class="php-comment"> *
</span><a href="#8" id="8" class="l">   8: </a><span class="php-comment"> * For the full copyright and license information, please view
</span><a href="#9" id="9" class="l">   9: </a><span class="php-comment"> * the file license.txt that was distributed with this source code.
</span><a href="#10" id="10" class="l">  10: </a><span class="php-comment"> */</span>
<a href="#11" id="11" class="l">  11: </a>
<a href="#12" id="12" class="l">  12: </a><span class="php-keyword1">namespace</span> Nette\Application;
<a href="#13" id="13" class="l">  13: </a>
<a href="#14" id="14" class="l">  14: </a><span class="php-keyword1">use</span> Nette,
<a href="#15" id="15" class="l">  15: </a>    Nette\Environment;
<a href="#16" id="16" class="l">  16: </a>
<a href="#17" id="17" class="l">  17: </a>
<a href="#18" id="18" class="l">  18: </a>
<a href="#19" id="19" class="l">  19: </a><span class="php-comment">/**
</span><a href="#20" id="20" class="l">  20: </a><span class="php-comment"> * Presenter object represents a webpage instance. It executes all the logic for the request.
</span><a href="#21" id="21" class="l">  21: </a><span class="php-comment"> *
</span><a href="#22" id="22" class="l">  22: </a><span class="php-comment"> * @author     David Grudl
</span><a href="#23" id="23" class="l">  23: </a><span class="php-comment"> *
</span><a href="#24" id="24" class="l">  24: </a><span class="php-comment"> * @property-read PresenterRequest $request
</span><a href="#25" id="25" class="l">  25: </a><span class="php-comment"> * @property-read int $phase
</span><a href="#26" id="26" class="l">  26: </a><span class="php-comment"> * @property-read array $signal
</span><a href="#27" id="27" class="l">  27: </a><span class="php-comment"> * @property-read string $action
</span><a href="#28" id="28" class="l">  28: </a><span class="php-comment"> * @property   string $view
</span><a href="#29" id="29" class="l">  29: </a><span class="php-comment"> * @property   string $layout
</span><a href="#30" id="30" class="l">  30: </a><span class="php-comment"> * @property-read mixed $payload
</span><a href="#31" id="31" class="l">  31: </a><span class="php-comment"> * @property-read Application $application
</span><a href="#32" id="32" class="l">  32: </a><span class="php-comment"> */</span>
<a href="#33" id="33" class="l">  33: </a><span class="php-keyword1">abstract</span> <span class="php-keyword1">class</span> Presenter <span class="php-keyword1">extends</span> Control <span class="php-keyword1">implements</span> IPresenter
<a href="#34" id="34" class="l">  34: </a>{
<a href="#35" id="35" class="l">  35: </a>    <span class="php-comment">/**#@+ @deprecated */</span>
<a href="#36" id="36" class="l">  36: </a>    <span class="php-keyword1">const</span> PHASE_STARTUP = <span class="php-num">1</span>;
<a href="#37" id="37" class="l">  37: </a>    <span class="php-keyword1">const</span> PHASE_SIGNAL = <span class="php-num">3</span>;
<a href="#38" id="38" class="l">  38: </a>    <span class="php-keyword1">const</span> PHASE_RENDER = <span class="php-num">4</span>;
<a href="#39" id="39" class="l">  39: </a>    <span class="php-keyword1">const</span> PHASE_SHUTDOWN = <span class="php-num">5</span>;
<a href="#40" id="40" class="l">  40: </a>    <span class="php-comment">/**#@-*/</span>
<a href="#41" id="41" class="l">  41: </a>
<a href="#42" id="42" class="l">  42: </a>    <span class="php-comment">/**#@+ bad link handling {@link Presenter::$invalidLinkMode} */</span>
<a href="#43" id="43" class="l">  43: </a>    <span class="php-keyword1">const</span> INVALID_LINK_SILENT = <span class="php-num">1</span>;
<a href="#44" id="44" class="l">  44: </a>    <span class="php-keyword1">const</span> INVALID_LINK_WARNING = <span class="php-num">2</span>;
<a href="#45" id="45" class="l">  45: </a>    <span class="php-keyword1">const</span> INVALID_LINK_EXCEPTION = <span class="php-num">3</span>;
<a href="#46" id="46" class="l">  46: </a>    <span class="php-comment">/**#@-*/</span>
<a href="#47" id="47" class="l">  47: </a>
<a href="#48" id="48" class="l">  48: </a>    <span class="php-comment">/**#@+ @internal special parameter key */</span>
<a href="#49" id="49" class="l">  49: </a>    <span class="php-keyword1">const</span> SIGNAL_KEY = <span class="php-quote">'do'</span>;
<a href="#50" id="50" class="l">  50: </a>    <span class="php-keyword1">const</span> ACTION_KEY = <span class="php-quote">'action'</span>;
<a href="#51" id="51" class="l">  51: </a>    <span class="php-keyword1">const</span> FLASH_KEY = <span class="php-quote">'_fid'</span>;
<a href="#52" id="52" class="l">  52: </a>    <span class="php-comment">/**#@-*/</span>
<a href="#53" id="53" class="l">  53: </a>
<a href="#54" id="54" class="l">  54: </a>    <span class="php-comment">/** @var string */</span>
<a href="#55" id="55" class="l">  55: </a>    <span class="php-keyword1">public</span> <span class="php-keyword1">static</span> <span class="php-var">$defaultAction</span> = <span class="php-quote">'default'</span>;
<a href="#56" id="56" class="l">  56: </a>
<a href="#57" id="57" class="l">  57: </a>    <span class="php-comment">/** @var int */</span>
<a href="#58" id="58" class="l">  58: </a>    <span class="php-keyword1">public</span> <span class="php-keyword1">static</span> <span class="php-var">$invalidLinkMode</span>;
<a href="#59" id="59" class="l">  59: </a>
<a href="#60" id="60" class="l">  60: </a>    <span class="php-comment">/** @var array of function(Presenter $sender, IPresenterResponse $response = NULL); Occurs when the presenter is shutting down */</span>
<a href="#61" id="61" class="l">  61: </a>    <span class="php-keyword1">public</span> <span class="php-var">$onShutdown</span>;
<a href="#62" id="62" class="l">  62: </a>
<a href="#63" id="63" class="l">  63: </a>    <span class="php-comment">/** @var bool (experimental) */</span>
<a href="#64" id="64" class="l">  64: </a>    <span class="php-keyword1">public</span> <span class="php-var">$oldLayoutMode</span> = <span class="php-keyword1">TRUE</span>;
<a href="#65" id="65" class="l">  65: </a>
<a href="#66" id="66" class="l">  66: </a>    <span class="php-comment">/** @var bool (experimental) */</span>
<a href="#67" id="67" class="l">  67: </a>    <span class="php-keyword1">public</span> <span class="php-var">$oldModuleMode</span> = <span class="php-keyword1">TRUE</span>;
<a href="#68" id="68" class="l">  68: </a>
<a href="#69" id="69" class="l">  69: </a>    <span class="php-comment">/** @var PresenterRequest */</span>
<a href="#70" id="70" class="l">  70: </a>    <span class="php-keyword1">private</span> <span class="php-var">$request</span>;
<a href="#71" id="71" class="l">  71: </a>
<a href="#72" id="72" class="l">  72: </a>    <span class="php-comment">/** @var IPresenterResponse */</span>
<a href="#73" id="73" class="l">  73: </a>    <span class="php-keyword1">private</span> <span class="php-var">$response</span>;
<a href="#74" id="74" class="l">  74: </a>
<a href="#75" id="75" class="l">  75: </a>    <span class="php-comment">/** @var int */</span>
<a href="#76" id="76" class="l">  76: </a>    <span class="php-keyword1">private</span> <span class="php-var">$phase</span>;
<a href="#77" id="77" class="l">  77: </a>
<a href="#78" id="78" class="l">  78: </a>    <span class="php-comment">/** @var bool  automatically call canonicalize() */</span>
<a href="#79" id="79" class="l">  79: </a>    <span class="php-keyword1">public</span> <span class="php-var">$autoCanonicalize</span> = <span class="php-keyword1">TRUE</span>;
<a href="#80" id="80" class="l">  80: </a>
<a href="#81" id="81" class="l">  81: </a>    <span class="php-comment">/** @var bool  use absolute Urls or paths? */</span>
<a href="#82" id="82" class="l">  82: </a>    <span class="php-keyword1">public</span> <span class="php-var">$absoluteUrls</span> = <span class="php-keyword1">FALSE</span>;
<a href="#83" id="83" class="l">  83: </a>
<a href="#84" id="84" class="l">  84: </a>    <span class="php-comment">/** @var array */</span>
<a href="#85" id="85" class="l">  85: </a>    <span class="php-keyword1">private</span> <span class="php-var">$globalParams</span>;
<a href="#86" id="86" class="l">  86: </a>
<a href="#87" id="87" class="l">  87: </a>    <span class="php-comment">/** @var array */</span>
<a href="#88" id="88" class="l">  88: </a>    <span class="php-keyword1">private</span> <span class="php-var">$globalState</span>;
<a href="#89" id="89" class="l">  89: </a>
<a href="#90" id="90" class="l">  90: </a>    <span class="php-comment">/** @var array */</span>
<a href="#91" id="91" class="l">  91: </a>    <span class="php-keyword1">private</span> <span class="php-var">$globalStateSinces</span>;
<a href="#92" id="92" class="l">  92: </a>
<a href="#93" id="93" class="l">  93: </a>    <span class="php-comment">/** @var string */</span>
<a href="#94" id="94" class="l">  94: </a>    <span class="php-keyword1">private</span> <span class="php-var">$action</span>;
<a href="#95" id="95" class="l">  95: </a>
<a href="#96" id="96" class="l">  96: </a>    <span class="php-comment">/** @var string */</span>
<a href="#97" id="97" class="l">  97: </a>    <span class="php-keyword1">private</span> <span class="php-var">$view</span>;
<a href="#98" id="98" class="l">  98: </a>
<a href="#99" id="99" class="l">  99: </a>    <span class="php-comment">/** @var string */</span>
<a href="#100" id="100" class="l"> 100: </a>    <span class="php-keyword1">private</span> <span class="php-var">$layout</span>;
<a href="#101" id="101" class="l"> 101: </a>
<a href="#102" id="102" class="l"> 102: </a>    <span class="php-comment">/** @var stdClass */</span>
<a href="#103" id="103" class="l"> 103: </a>    <span class="php-keyword1">private</span> <span class="php-var">$payload</span>;
<a href="#104" id="104" class="l"> 104: </a>
<a href="#105" id="105" class="l"> 105: </a>    <span class="php-comment">/** @var string */</span>
<a href="#106" id="106" class="l"> 106: </a>    <span class="php-keyword1">private</span> <span class="php-var">$signalReceiver</span>;
<a href="#107" id="107" class="l"> 107: </a>
<a href="#108" id="108" class="l"> 108: </a>    <span class="php-comment">/** @var string */</span>
<a href="#109" id="109" class="l"> 109: </a>    <span class="php-keyword1">private</span> <span class="php-var">$signal</span>;
<a href="#110" id="110" class="l"> 110: </a>
<a href="#111" id="111" class="l"> 111: </a>    <span class="php-comment">/** @var bool */</span>
<a href="#112" id="112" class="l"> 112: </a>    <span class="php-keyword1">private</span> <span class="php-var">$ajaxMode</span>;
<a href="#113" id="113" class="l"> 113: </a>
<a href="#114" id="114" class="l"> 114: </a>    <span class="php-comment">/** @var bool */</span>
<a href="#115" id="115" class="l"> 115: </a>    <span class="php-keyword1">private</span> <span class="php-var">$startupCheck</span>;
<a href="#116" id="116" class="l"> 116: </a>
<a href="#117" id="117" class="l"> 117: </a>    <span class="php-comment">/** @var PresenterRequest */</span>
<a href="#118" id="118" class="l"> 118: </a>    <span class="php-keyword1">private</span> <span class="php-var">$lastCreatedRequest</span>;
<a href="#119" id="119" class="l"> 119: </a>
<a href="#120" id="120" class="l"> 120: </a>    <span class="php-comment">/** @var array */</span>
<a href="#121" id="121" class="l"> 121: </a>    <span class="php-keyword1">private</span> <span class="php-var">$lastCreatedRequestFlag</span>;
<a href="#122" id="122" class="l"> 122: </a>
<a href="#123" id="123" class="l"> 123: </a>
<a href="#124" id="124" class="l"> 124: </a>
<a href="#125" id="125" class="l"> 125: </a>    <span class="php-comment">/**
</span><a href="#126" id="126" class="l"> 126: </a><span class="php-comment">     * @return PresenterRequest
</span><a href="#127" id="127" class="l"> 127: </a><span class="php-comment">     */</span>
<a href="#128" id="128" class="l"> 128: </a>    <span class="php-keyword1">final</span> <span class="php-keyword1">public</span> <span class="php-keyword1">function</span> getRequest()
<a href="#129" id="129" class="l"> 129: </a>    {
<a href="#130" id="130" class="l"> 130: </a>        <span class="php-keyword1">return</span> <span class="php-var">$this</span>-&gt;request;
<a href="#131" id="131" class="l"> 131: </a>    }
<a href="#132" id="132" class="l"> 132: </a>
<a href="#133" id="133" class="l"> 133: </a>
<a href="#134" id="134" class="l"> 134: </a>
<a href="#135" id="135" class="l"> 135: </a>    <span class="php-comment">/**
</span><a href="#136" id="136" class="l"> 136: </a><span class="php-comment">     * Returns self.
</span><a href="#137" id="137" class="l"> 137: </a><span class="php-comment">     * @return Presenter
</span><a href="#138" id="138" class="l"> 138: </a><span class="php-comment">     */</span>
<a href="#139" id="139" class="l"> 139: </a>    <span class="php-keyword1">final</span> <span class="php-keyword1">public</span> <span class="php-keyword1">function</span> getPresenter(<span class="php-var">$need</span> = <span class="php-keyword1">TRUE</span>)
<a href="#140" id="140" class="l"> 140: </a>    {
<a href="#141" id="141" class="l"> 141: </a>        <span class="php-keyword1">return</span> <span class="php-var">$this</span>;
<a href="#142" id="142" class="l"> 142: </a>    }
<a href="#143" id="143" class="l"> 143: </a>
<a href="#144" id="144" class="l"> 144: </a>
<a href="#145" id="145" class="l"> 145: </a>
<a href="#146" id="146" class="l"> 146: </a>    <span class="php-comment">/**
</span><a href="#147" id="147" class="l"> 147: </a><span class="php-comment">     * Returns a name that uniquely identifies component.
</span><a href="#148" id="148" class="l"> 148: </a><span class="php-comment">     * @return string
</span><a href="#149" id="149" class="l"> 149: </a><span class="php-comment">     */</span>
<a href="#150" id="150" class="l"> 150: </a>    <span class="php-keyword1">final</span> <span class="php-keyword1">public</span> <span class="php-keyword1">function</span> getUniqueId()
<a href="#151" id="151" class="l"> 151: </a>    {
<a href="#152" id="152" class="l"> 152: </a>        <span class="php-keyword1">return</span> <span class="php-quote">''</span>;
<a href="#153" id="153" class="l"> 153: </a>    }
<a href="#154" id="154" class="l"> 154: </a>
<a href="#155" id="155" class="l"> 155: </a>
<a href="#156" id="156" class="l"> 156: </a>
<a href="#157" id="157" class="l"> 157: </a>    <span class="php-comment">/********************* interface IPresenter ****************d*g**/</span>
<a href="#158" id="158" class="l"> 158: </a>
<a href="#159" id="159" class="l"> 159: </a>
<a href="#160" id="160" class="l"> 160: </a>
<a href="#161" id="161" class="l"> 161: </a>    <span class="php-comment">/**
</span><a href="#162" id="162" class="l"> 162: </a><span class="php-comment">     * @param  PresenterRequest
</span><a href="#163" id="163" class="l"> 163: </a><span class="php-comment">     * @return IPresenterResponse
</span><a href="#164" id="164" class="l"> 164: </a><span class="php-comment">     */</span>
<a href="#165" id="165" class="l"> 165: </a>    <span class="php-keyword1">public</span> <span class="php-keyword1">function</span> run(PresenterRequest <span class="php-var">$request</span>)
<a href="#166" id="166" class="l"> 166: </a>    {
<a href="#167" id="167" class="l"> 167: </a>        <span class="php-keyword1">try</span> {
<a href="#168" id="168" class="l"> 168: </a>            <span class="php-comment">// PHASE 1: STARTUP
</span><a href="#169" id="169" class="l"> 169: </a>            <span class="php-var">$this</span>-&gt;phase = self::PHASE_STARTUP;
<a href="#170" id="170" class="l"> 170: </a>            <span class="php-var">$this</span>-&gt;request = <span class="php-var">$request</span>;
<a href="#171" id="171" class="l"> 171: </a>            <span class="php-var">$this</span>-&gt;payload = (object) <span class="php-keyword1">NULL</span>;
<a href="#172" id="172" class="l"> 172: </a>            <span class="php-var">$this</span>-&gt;setParent(<span class="php-var">$this</span>-&gt;getParent(), <span class="php-var">$request</span>-&gt;getPresenterName());
<a href="#173" id="173" class="l"> 173: </a>
<a href="#174" id="174" class="l"> 174: </a>            <span class="php-var">$this</span>-&gt;initGlobalParams();
<a href="#175" id="175" class="l"> 175: </a>            <span class="php-var">$this</span>-&gt;startup();
<a href="#176" id="176" class="l"> 176: </a>            <span class="php-keyword1">if</span> (!<span class="php-var">$this</span>-&gt;startupCheck) {
<a href="#177" id="177" class="l"> 177: </a>                <span class="php-var">$class</span> = <span class="php-var">$this</span>-&gt;reflection-&gt;getMethod(<span class="php-quote">'startup'</span>)-&gt;getDeclaringClass()-&gt;getName();
<a href="#178" id="178" class="l"> 178: </a>                <span class="php-keyword2">trigger_error</span>(<span class="php-quote">&quot;Method </span><span class="php-var">$class</span><span class="php-quote">::startup() or its descendant doesn't call parent::startup().&quot;</span>, E_USER_WARNING);
<a href="#179" id="179" class="l"> 179: </a>            }
<a href="#180" id="180" class="l"> 180: </a>            <span class="php-comment">// calls $this-&gt;action&lt;Action&gt;()
</span><a href="#181" id="181" class="l"> 181: </a>            <span class="php-var">$this</span>-&gt;tryCall(<span class="php-var">$this</span>-&gt;formatActionMethod(<span class="php-var">$this</span>-&gt;getAction()), <span class="php-var">$this</span>-&gt;params);
<a href="#182" id="182" class="l"> 182: </a>
<a href="#183" id="183" class="l"> 183: </a>            <span class="php-keyword1">if</span> (<span class="php-var">$this</span>-&gt;autoCanonicalize) {
<a href="#184" id="184" class="l"> 184: </a>                <span class="php-var">$this</span>-&gt;canonicalize();
<a href="#185" id="185" class="l"> 185: </a>            }
<a href="#186" id="186" class="l"> 186: </a>            <span class="php-keyword1">if</span> (<span class="php-var">$this</span>-&gt;getHttpRequest()-&gt;isMethod(<span class="php-quote">'head'</span>)) {
<a href="#187" id="187" class="l"> 187: </a>                <span class="php-var">$this</span>-&gt;terminate();
<a href="#188" id="188" class="l"> 188: </a>            }
<a href="#189" id="189" class="l"> 189: </a>
<a href="#190" id="190" class="l"> 190: </a>            <span class="php-comment">// back compatibility
</span><a href="#191" id="191" class="l"> 191: </a>            <span class="php-keyword1">if</span> (<span class="php-keyword2">method_exists</span>(<span class="php-var">$this</span>, <span class="php-quote">'beforePrepare'</span>)) {
<a href="#192" id="192" class="l"> 192: </a>                <span class="php-var">$this</span>-&gt;beforePrepare();
<a href="#193" id="193" class="l"> 193: </a>                <span class="php-keyword2">trigger_error</span>(<span class="php-quote">'beforePrepare() is deprecated; use createComponent{Name}() instead.'</span>, E_USER_WARNING);
<a href="#194" id="194" class="l"> 194: </a>            }
<a href="#195" id="195" class="l"> 195: </a>            <span class="php-keyword1">if</span> (<span class="php-var">$this</span>-&gt;tryCall(<span class="php-quote">'prepare'</span> . <span class="php-var">$this</span>-&gt;getView(), <span class="php-var">$this</span>-&gt;params)) {
<a href="#196" id="196" class="l"> 196: </a>                <span class="php-keyword2">trigger_error</span>(<span class="php-quote">'prepare'</span> . <span class="php-keyword2">ucfirst</span>(<span class="php-var">$this</span>-&gt;getView()) . <span class="php-quote">'() is deprecated; use createComponent{Name}() instead.'</span>, E_USER_WARNING);
<a href="#197" id="197" class="l"> 197: </a>            }
<a href="#198" id="198" class="l"> 198: </a>
<a href="#199" id="199" class="l"> 199: </a>            <span class="php-comment">// PHASE 2: SIGNAL HANDLING
</span><a href="#200" id="200" class="l"> 200: </a>            <span class="php-var">$this</span>-&gt;phase = self::PHASE_SIGNAL;
<a href="#201" id="201" class="l"> 201: </a>            <span class="php-comment">// calls $this-&gt;handle&lt;Signal&gt;()
</span><a href="#202" id="202" class="l"> 202: </a>            <span class="php-var">$this</span>-&gt;processSignal();
<a href="#203" id="203" class="l"> 203: </a>
<a href="#204" id="204" class="l"> 204: </a>            <span class="php-comment">// PHASE 3: RENDERING VIEW
</span><a href="#205" id="205" class="l"> 205: </a>            <span class="php-var">$this</span>-&gt;phase = self::PHASE_RENDER;
<a href="#206" id="206" class="l"> 206: </a>
<a href="#207" id="207" class="l"> 207: </a>            <span class="php-var">$this</span>-&gt;beforeRender();
<a href="#208" id="208" class="l"> 208: </a>            <span class="php-comment">// calls $this-&gt;render&lt;View&gt;()
</span><a href="#209" id="209" class="l"> 209: </a>            <span class="php-var">$this</span>-&gt;tryCall(<span class="php-var">$this</span>-&gt;formatRenderMethod(<span class="php-var">$this</span>-&gt;getView()), <span class="php-var">$this</span>-&gt;params);
<a href="#210" id="210" class="l"> 210: </a>            <span class="php-var">$this</span>-&gt;afterRender();
<a href="#211" id="211" class="l"> 211: </a>
<a href="#212" id="212" class="l"> 212: </a>            <span class="php-comment">// save component tree persistent state
</span><a href="#213" id="213" class="l"> 213: </a>            <span class="php-var">$this</span>-&gt;saveGlobalState();
<a href="#214" id="214" class="l"> 214: </a>            <span class="php-keyword1">if</span> (<span class="php-var">$this</span>-&gt;isAjax()) {
<a href="#215" id="215" class="l"> 215: </a>                <span class="php-var">$this</span>-&gt;payload-&gt;state = <span class="php-var">$this</span>-&gt;getGlobalState();
<a href="#216" id="216" class="l"> 216: </a>            }
<a href="#217" id="217" class="l"> 217: </a>
<a href="#218" id="218" class="l"> 218: </a>            <span class="php-comment">// finish template rendering
</span><a href="#219" id="219" class="l"> 219: </a>            <span class="php-var">$this</span>-&gt;sendTemplate();
<a href="#220" id="220" class="l"> 220: </a>
<a href="#221" id="221" class="l"> 221: </a>        } <span class="php-keyword1">catch</span> (AbortException <span class="php-var">$e</span>) {
<a href="#222" id="222" class="l"> 222: </a>            <span class="php-comment">// continue with shutting down
</span><a href="#223" id="223" class="l"> 223: </a>        } <span class="php-comment">/* finally */</span> {
<a href="#224" id="224" class="l"> 224: </a>
<a href="#225" id="225" class="l"> 225: </a>            <span class="php-comment">// PHASE 4: SHUTDOWN
</span><a href="#226" id="226" class="l"> 226: </a>            <span class="php-var">$this</span>-&gt;phase = self::PHASE_SHUTDOWN;
<a href="#227" id="227" class="l"> 227: </a>
<a href="#228" id="228" class="l"> 228: </a>            <span class="php-keyword1">if</span> (<span class="php-var">$this</span>-&gt;isAjax()) <span class="php-keyword1">try</span> {
<a href="#229" id="229" class="l"> 229: </a>                <span class="php-var">$hasPayload</span> = (<span class="php-keyword1">array</span>) <span class="php-var">$this</span>-&gt;payload; <span class="php-keyword1">unset</span>(<span class="php-var">$hasPayload</span>[<span class="php-quote">'state'</span>]);
<a href="#230" id="230" class="l"> 230: </a>                <span class="php-keyword1">if</span> (<span class="php-var">$this</span>-&gt;response <span class="php-keyword1">instanceof</span> RenderResponse &amp;&amp; (<span class="php-var">$this</span>-&gt;isControlInvalid() || <span class="php-var">$hasPayload</span>)) { <span class="php-comment">// snippets - TODO
</span><a href="#231" id="231" class="l"> 231: </a>                    Nette\Templates\SnippetHelper::<span class="php-var">$outputAllowed</span> = <span class="php-keyword1">FALSE</span>;
<a href="#232" id="232" class="l"> 232: </a>                    <span class="php-var">$this</span>-&gt;response-&gt;send();
<a href="#233" id="233" class="l"> 233: </a>                    <span class="php-var">$this</span>-&gt;sendPayload();
<a href="#234" id="234" class="l"> 234: </a>
<a href="#235" id="235" class="l"> 235: </a>                } <span class="php-keyword1">elseif</span> (!<span class="php-var">$this</span>-&gt;response &amp;&amp; <span class="php-var">$hasPayload</span>) { <span class="php-comment">// back compatibility for use terminate() instead of sendPayload()
</span><a href="#236" id="236" class="l"> 236: </a>                    <span class="php-var">$this</span>-&gt;sendPayload();
<a href="#237" id="237" class="l"> 237: </a>                }
<a href="#238" id="238" class="l"> 238: </a>            } <span class="php-keyword1">catch</span> (AbortException <span class="php-var">$e</span>) { }
<a href="#239" id="239" class="l"> 239: </a>
<a href="#240" id="240" class="l"> 240: </a>            <span class="php-keyword1">if</span> (<span class="php-var">$this</span>-&gt;hasFlashSession()) {
<a href="#241" id="241" class="l"> 241: </a>                <span class="php-var">$this</span>-&gt;getFlashSession()-&gt;setExpiration(<span class="php-var">$this</span>-&gt;response <span class="php-keyword1">instanceof</span> RedirectingResponse ? <span class="php-quote">'+ 30 seconds'</span>: <span class="php-quote">'+ 3 seconds'</span>);
<a href="#242" id="242" class="l"> 242: </a>            }
<a href="#243" id="243" class="l"> 243: </a>
<a href="#244" id="244" class="l"> 244: </a>            <span class="php-var">$this</span>-&gt;onShutdown(<span class="php-var">$this</span>, <span class="php-var">$this</span>-&gt;response);
<a href="#245" id="245" class="l"> 245: </a>            <span class="php-var">$this</span>-&gt;shutdown(<span class="php-var">$this</span>-&gt;response);
<a href="#246" id="246" class="l"> 246: </a>
<a href="#247" id="247" class="l"> 247: </a>            <span class="php-keyword1">return</span> <span class="php-var">$this</span>-&gt;response;
<a href="#248" id="248" class="l"> 248: </a>        }
<a href="#249" id="249" class="l"> 249: </a>    }
<a href="#250" id="250" class="l"> 250: </a>
<a href="#251" id="251" class="l"> 251: </a>
<a href="#252" id="252" class="l"> 252: </a>
<a href="#253" id="253" class="l"> 253: </a>    <span class="php-comment">/**
</span><a href="#254" id="254" class="l"> 254: </a><span class="php-comment">     * @deprecated
</span><a href="#255" id="255" class="l"> 255: </a><span class="php-comment">     */</span>
<a href="#256" id="256" class="l"> 256: </a>    <span class="php-keyword1">final</span> <span class="php-keyword1">public</span> <span class="php-keyword1">function</span> getPhase()
<a href="#257" id="257" class="l"> 257: </a>    {
<a href="#258" id="258" class="l"> 258: </a>        <span class="php-keyword1">throw</span> <span class="php-keyword1">new</span> \DeprecatedException(__METHOD__ . <span class="php-quote">'() is deprecated.'</span>);
<a href="#259" id="259" class="l"> 259: </a>        <span class="php-keyword1">return</span> <span class="php-var">$this</span>-&gt;phase;
<a href="#260" id="260" class="l"> 260: </a>    }
<a href="#261" id="261" class="l"> 261: </a>
<a href="#262" id="262" class="l"> 262: </a>
<a href="#263" id="263" class="l"> 263: </a>
<a href="#264" id="264" class="l"> 264: </a>    <span class="php-comment">/**
</span><a href="#265" id="265" class="l"> 265: </a><span class="php-comment">     * @return void
</span><a href="#266" id="266" class="l"> 266: </a><span class="php-comment">     */</span>
<a href="#267" id="267" class="l"> 267: </a>    <span class="php-keyword1">protected</span> <span class="php-keyword1">function</span> startup()
<a href="#268" id="268" class="l"> 268: </a>    {
<a href="#269" id="269" class="l"> 269: </a>        <span class="php-var">$this</span>-&gt;startupCheck = <span class="php-keyword1">TRUE</span>;
<a href="#270" id="270" class="l"> 270: </a>    }
<a href="#271" id="271" class="l"> 271: </a>
<a href="#272" id="272" class="l"> 272: </a>
<a href="#273" id="273" class="l"> 273: </a>
<a href="#274" id="274" class="l"> 274: </a>    <span class="php-comment">/**
</span><a href="#275" id="275" class="l"> 275: </a><span class="php-comment">     * Common render method.
</span><a href="#276" id="276" class="l"> 276: </a><span class="php-comment">     * @return void
</span><a href="#277" id="277" class="l"> 277: </a><span class="php-comment">     */</span>
<a href="#278" id="278" class="l"> 278: </a>    <span class="php-keyword1">protected</span> <span class="php-keyword1">function</span> beforeRender()
<a href="#279" id="279" class="l"> 279: </a>    {
<a href="#280" id="280" class="l"> 280: </a>    }
<a href="#281" id="281" class="l"> 281: </a>
<a href="#282" id="282" class="l"> 282: </a>
<a href="#283" id="283" class="l"> 283: </a>
<a href="#284" id="284" class="l"> 284: </a>    <span class="php-comment">/**
</span><a href="#285" id="285" class="l"> 285: </a><span class="php-comment">     * Common render method.
</span><a href="#286" id="286" class="l"> 286: </a><span class="php-comment">     * @return void
</span><a href="#287" id="287" class="l"> 287: </a><span class="php-comment">     */</span>
<a href="#288" id="288" class="l"> 288: </a>    <span class="php-keyword1">protected</span> <span class="php-keyword1">function</span> afterRender()
<a href="#289" id="289" class="l"> 289: </a>    {
<a href="#290" id="290" class="l"> 290: </a>    }
<a href="#291" id="291" class="l"> 291: </a>
<a href="#292" id="292" class="l"> 292: </a>
<a href="#293" id="293" class="l"> 293: </a>
<a href="#294" id="294" class="l"> 294: </a>    <span class="php-comment">/**
</span><a href="#295" id="295" class="l"> 295: </a><span class="php-comment">     * @param  IPresenterResponse  optional catched exception
</span><a href="#296" id="296" class="l"> 296: </a><span class="php-comment">     * @return void
</span><a href="#297" id="297" class="l"> 297: </a><span class="php-comment">     */</span>
<a href="#298" id="298" class="l"> 298: </a>    <span class="php-keyword1">protected</span> <span class="php-keyword1">function</span> shutdown(<span class="php-var">$response</span>)
<a href="#299" id="299" class="l"> 299: </a>    {
<a href="#300" id="300" class="l"> 300: </a>    }
<a href="#301" id="301" class="l"> 301: </a>
<a href="#302" id="302" class="l"> 302: </a>
<a href="#303" id="303" class="l"> 303: </a>
<a href="#304" id="304" class="l"> 304: </a>    <span class="php-comment">/********************* signal handling ****************d*g**/</span>
<a href="#305" id="305" class="l"> 305: </a>
<a href="#306" id="306" class="l"> 306: </a>
<a href="#307" id="307" class="l"> 307: </a>
<a href="#308" id="308" class="l"> 308: </a>    <span class="php-comment">/**
</span><a href="#309" id="309" class="l"> 309: </a><span class="php-comment">     * @return void
</span><a href="#310" id="310" class="l"> 310: </a><span class="php-comment">     * @throws BadSignalException
</span><a href="#311" id="311" class="l"> 311: </a><span class="php-comment">     */</span>
<a href="#312" id="312" class="l"> 312: </a>    <span class="php-keyword1">public</span> <span class="php-keyword1">function</span> processSignal()
<a href="#313" id="313" class="l"> 313: </a>    {
<a href="#314" id="314" class="l"> 314: </a>        <span class="php-keyword1">if</span> (<span class="php-var">$this</span>-&gt;signal === <span class="php-keyword1">NULL</span>) <span class="php-keyword1">return</span>;
<a href="#315" id="315" class="l"> 315: </a>
<a href="#316" id="316" class="l"> 316: </a>        <span class="php-var">$component</span> = <span class="php-var">$this</span>-&gt;signalReceiver === <span class="php-quote">''</span> ? <span class="php-var">$this</span> : <span class="php-var">$this</span>-&gt;getComponent(<span class="php-var">$this</span>-&gt;signalReceiver, <span class="php-keyword1">FALSE</span>);
<a href="#317" id="317" class="l"> 317: </a>        <span class="php-keyword1">if</span> (<span class="php-var">$component</span> === <span class="php-keyword1">NULL</span>) {
<a href="#318" id="318" class="l"> 318: </a>            <span class="php-keyword1">throw</span> <span class="php-keyword1">new</span> BadSignalException(<span class="php-quote">&quot;The signal receiver component '</span><span class="php-var">$this</span><span class="php-quote">-&gt;signalReceiver' is not found.&quot;</span>);
<a href="#319" id="319" class="l"> 319: </a>
<a href="#320" id="320" class="l"> 320: </a>        } <span class="php-keyword1">elseif</span> (!<span class="php-var">$component</span> <span class="php-keyword1">instanceof</span> ISignalReceiver) {
<a href="#321" id="321" class="l"> 321: </a>            <span class="php-keyword1">throw</span> <span class="php-keyword1">new</span> BadSignalException(<span class="php-quote">&quot;The signal receiver component '</span><span class="php-var">$this</span><span class="php-quote">-&gt;signalReceiver' is not ISignalReceiver implementor.&quot;</span>);
<a href="#322" id="322" class="l"> 322: </a>        }
<a href="#323" id="323" class="l"> 323: </a>
<a href="#324" id="324" class="l"> 324: </a>        <span class="php-comment">// auto invalidate
</span><a href="#325" id="325" class="l"> 325: </a>        <span class="php-keyword1">if</span> (<span class="php-var">$this</span>-&gt;oldLayoutMode &amp;&amp; <span class="php-var">$component</span> <span class="php-keyword1">instanceof</span> IRenderable) {
<a href="#326" id="326" class="l"> 326: </a>            <span class="php-var">$component</span>-&gt;invalidateControl();
<a href="#327" id="327" class="l"> 327: </a>        }
<a href="#328" id="328" class="l"> 328: </a>
<a href="#329" id="329" class="l"> 329: </a>        <span class="php-var">$component</span>-&gt;signalReceived(<span class="php-var">$this</span>-&gt;signal);
<a href="#330" id="330" class="l"> 330: </a>        <span class="php-var">$this</span>-&gt;signal = <span class="php-keyword1">NULL</span>;
<a href="#331" id="331" class="l"> 331: </a>    }
<a href="#332" id="332" class="l"> 332: </a>
<a href="#333" id="333" class="l"> 333: </a>
<a href="#334" id="334" class="l"> 334: </a>
<a href="#335" id="335" class="l"> 335: </a>    <span class="php-comment">/**
</span><a href="#336" id="336" class="l"> 336: </a><span class="php-comment">     * Returns pair signal receiver and name.
</span><a href="#337" id="337" class="l"> 337: </a><span class="php-comment">     * @return array|NULL
</span><a href="#338" id="338" class="l"> 338: </a><span class="php-comment">     */</span>
<a href="#339" id="339" class="l"> 339: </a>    <span class="php-keyword1">final</span> <span class="php-keyword1">public</span> <span class="php-keyword1">function</span> getSignal()
<a href="#340" id="340" class="l"> 340: </a>    {
<a href="#341" id="341" class="l"> 341: </a>        <span class="php-keyword1">return</span> <span class="php-var">$this</span>-&gt;signal === <span class="php-keyword1">NULL</span> ? <span class="php-keyword1">NULL</span> : <span class="php-keyword1">array</span>(<span class="php-var">$this</span>-&gt;signalReceiver, <span class="php-var">$this</span>-&gt;signal);
<a href="#342" id="342" class="l"> 342: </a>    }
<a href="#343" id="343" class="l"> 343: </a>
<a href="#344" id="344" class="l"> 344: </a>
<a href="#345" id="345" class="l"> 345: </a>
<a href="#346" id="346" class="l"> 346: </a>    <span class="php-comment">/**
</span><a href="#347" id="347" class="l"> 347: </a><span class="php-comment">     * Checks if the signal receiver is the given one.
</span><a href="#348" id="348" class="l"> 348: </a><span class="php-comment">     * @param  mixed  component or its id
</span><a href="#349" id="349" class="l"> 349: </a><span class="php-comment">     * @param  string signal name (optional)
</span><a href="#350" id="350" class="l"> 350: </a><span class="php-comment">     * @return bool
</span><a href="#351" id="351" class="l"> 351: </a><span class="php-comment">     */</span>
<a href="#352" id="352" class="l"> 352: </a>    <span class="php-keyword1">final</span> <span class="php-keyword1">public</span> <span class="php-keyword1">function</span> isSignalReceiver(<span class="php-var">$component</span>, <span class="php-var">$signal</span> = <span class="php-keyword1">NULL</span>)
<a href="#353" id="353" class="l"> 353: </a>    {
<a href="#354" id="354" class="l"> 354: </a>        <span class="php-keyword1">if</span> (<span class="php-var">$component</span> <span class="php-keyword1">instanceof</span> Nette\Component) {
<a href="#355" id="355" class="l"> 355: </a>            <span class="php-var">$component</span> = <span class="php-var">$component</span> === <span class="php-var">$this</span> ? <span class="php-quote">''</span> : <span class="php-var">$component</span>-&gt;lookupPath(__CLASS__, <span class="php-keyword1">TRUE</span>);
<a href="#356" id="356" class="l"> 356: </a>        }
<a href="#357" id="357" class="l"> 357: </a>
<a href="#358" id="358" class="l"> 358: </a>        <span class="php-keyword1">if</span> (<span class="php-var">$this</span>-&gt;signal === <span class="php-keyword1">NULL</span>) {
<a href="#359" id="359" class="l"> 359: </a>            <span class="php-keyword1">return</span> <span class="php-keyword1">FALSE</span>;
<a href="#360" id="360" class="l"> 360: </a>
<a href="#361" id="361" class="l"> 361: </a>        } <span class="php-keyword1">elseif</span> (<span class="php-var">$signal</span> === <span class="php-keyword1">TRUE</span>) {
<a href="#362" id="362" class="l"> 362: </a>            <span class="php-keyword1">return</span> <span class="php-var">$component</span> === <span class="php-quote">''</span>
<a href="#363" id="363" class="l"> 363: </a>                || <span class="php-keyword2">strncmp</span>(<span class="php-var">$this</span>-&gt;signalReceiver . <span class="php-quote">'-'</span>, <span class="php-var">$component</span> . <span class="php-quote">'-'</span>, <span class="php-keyword2">strlen</span>(<span class="php-var">$component</span>) + <span class="php-num">1</span>) === <span class="php-num">0</span>;
<a href="#364" id="364" class="l"> 364: </a>
<a href="#365" id="365" class="l"> 365: </a>        } <span class="php-keyword1">elseif</span> (<span class="php-var">$signal</span> === <span class="php-keyword1">NULL</span>) {
<a href="#366" id="366" class="l"> 366: </a>            <span class="php-keyword1">return</span> <span class="php-var">$this</span>-&gt;signalReceiver === <span class="php-var">$component</span>;
<a href="#367" id="367" class="l"> 367: </a>
<a href="#368" id="368" class="l"> 368: </a>        } <span class="php-keyword1">else</span> {
<a href="#369" id="369" class="l"> 369: </a>            <span class="php-keyword1">return</span> <span class="php-var">$this</span>-&gt;signalReceiver === <span class="php-var">$component</span> &amp;&amp; <span class="php-keyword2">strcasecmp</span>(<span class="php-var">$signal</span>, <span class="php-var">$this</span>-&gt;signal) === <span class="php-num">0</span>;
<a href="#370" id="370" class="l"> 370: </a>        }
<a href="#371" id="371" class="l"> 371: </a>    }
<a href="#372" id="372" class="l"> 372: </a>
<a href="#373" id="373" class="l"> 373: </a>
<a href="#374" id="374" class="l"> 374: </a>
<a href="#375" id="375" class="l"> 375: </a>    <span class="php-comment">/********************* rendering ****************d*g**/</span>
<a href="#376" id="376" class="l"> 376: </a>
<a href="#377" id="377" class="l"> 377: </a>
<a href="#378" id="378" class="l"> 378: </a>
<a href="#379" id="379" class="l"> 379: </a>    <span class="php-comment">/**
</span><a href="#380" id="380" class="l"> 380: </a><span class="php-comment">     * Returns current action name.
</span><a href="#381" id="381" class="l"> 381: </a><span class="php-comment">     * @return string
</span><a href="#382" id="382" class="l"> 382: </a><span class="php-comment">     */</span>
<a href="#383" id="383" class="l"> 383: </a>    <span class="php-keyword1">final</span> <span class="php-keyword1">public</span> <span class="php-keyword1">function</span> getAction(<span class="php-var">$fullyQualified</span> = <span class="php-keyword1">FALSE</span>)
<a href="#384" id="384" class="l"> 384: </a>    {
<a href="#385" id="385" class="l"> 385: </a>        <span class="php-keyword1">return</span> <span class="php-var">$fullyQualified</span> ? <span class="php-quote">':'</span> . <span class="php-var">$this</span>-&gt;getName() . <span class="php-quote">':'</span> . <span class="php-var">$this</span>-&gt;action : <span class="php-var">$this</span>-&gt;action;
<a href="#386" id="386" class="l"> 386: </a>    }
<a href="#387" id="387" class="l"> 387: </a>
<a href="#388" id="388" class="l"> 388: </a>
<a href="#389" id="389" class="l"> 389: </a>
<a href="#390" id="390" class="l"> 390: </a>    <span class="php-comment">/**
</span><a href="#391" id="391" class="l"> 391: </a><span class="php-comment">     * Changes current action. Only alphanumeric characters are allowed.
</span><a href="#392" id="392" class="l"> 392: </a><span class="php-comment">     * @param  string
</span><a href="#393" id="393" class="l"> 393: </a><span class="php-comment">     * @return void
</span><a href="#394" id="394" class="l"> 394: </a><span class="php-comment">     */</span>
<a href="#395" id="395" class="l"> 395: </a>    <span class="php-keyword1">public</span> <span class="php-keyword1">function</span> changeAction(<span class="php-var">$action</span>)
<a href="#396" id="396" class="l"> 396: </a>    {
<a href="#397" id="397" class="l"> 397: </a>        <span class="php-keyword1">if</span> (<span class="php-keyword2">preg_match</span>(<span class="php-quote">&quot;#^[a-zA-Z0-9][a-zA-Z0-9_\x7f-\xff]*</span><span class="php-var">$</span><span class="php-quote">#&quot;</span>, <span class="php-var">$action</span>)) {
<a href="#398" id="398" class="l"> 398: </a>            <span class="php-var">$this</span>-&gt;action = <span class="php-var">$action</span>;
<a href="#399" id="399" class="l"> 399: </a>            <span class="php-var">$this</span>-&gt;view = <span class="php-var">$action</span>;
<a href="#400" id="400" class="l"> 400: </a>
<a href="#401" id="401" class="l"> 401: </a>        } <span class="php-keyword1">else</span> {
<a href="#402" id="402" class="l"> 402: </a>            <span class="php-keyword1">throw</span> <span class="php-keyword1">new</span> BadRequestException(<span class="php-quote">&quot;Action name '</span><span class="php-var">$action</span><span class="php-quote">' is not alphanumeric string.&quot;</span>);
<a href="#403" id="403" class="l"> 403: </a>        }
<a href="#404" id="404" class="l"> 404: </a>    }
<a href="#405" id="405" class="l"> 405: </a>
<a href="#406" id="406" class="l"> 406: </a>
<a href="#407" id="407" class="l"> 407: </a>
<a href="#408" id="408" class="l"> 408: </a>    <span class="php-comment">/**
</span><a href="#409" id="409" class="l"> 409: </a><span class="php-comment">     * Returns current view.
</span><a href="#410" id="410" class="l"> 410: </a><span class="php-comment">     * @return string
</span><a href="#411" id="411" class="l"> 411: </a><span class="php-comment">     */</span>
<a href="#412" id="412" class="l"> 412: </a>    <span class="php-keyword1">final</span> <span class="php-keyword1">public</span> <span class="php-keyword1">function</span> getView()
<a href="#413" id="413" class="l"> 413: </a>    {
<a href="#414" id="414" class="l"> 414: </a>        <span class="php-keyword1">return</span> <span class="php-var">$this</span>-&gt;view;
<a href="#415" id="415" class="l"> 415: </a>    }
<a href="#416" id="416" class="l"> 416: </a>
<a href="#417" id="417" class="l"> 417: </a>
<a href="#418" id="418" class="l"> 418: </a>
<a href="#419" id="419" class="l"> 419: </a>    <span class="php-comment">/**
</span><a href="#420" id="420" class="l"> 420: </a><span class="php-comment">     * Changes current view. Any name is allowed.
</span><a href="#421" id="421" class="l"> 421: </a><span class="php-comment">     * @param  string
</span><a href="#422" id="422" class="l"> 422: </a><span class="php-comment">     * @return Presenter  provides a fluent interface
</span><a href="#423" id="423" class="l"> 423: </a><span class="php-comment">     */</span>
<a href="#424" id="424" class="l"> 424: </a>    <span class="php-keyword1">public</span> <span class="php-keyword1">function</span> setView(<span class="php-var">$view</span>)
<a href="#425" id="425" class="l"> 425: </a>    {
<a href="#426" id="426" class="l"> 426: </a>        <span class="php-var">$this</span>-&gt;view = (string) <span class="php-var">$view</span>;
<a href="#427" id="427" class="l"> 427: </a>        <span class="php-keyword1">return</span> <span class="php-var">$this</span>;
<a href="#428" id="428" class="l"> 428: </a>    }
<a href="#429" id="429" class="l"> 429: </a>
<a href="#430" id="430" class="l"> 430: </a>
<a href="#431" id="431" class="l"> 431: </a>
<a href="#432" id="432" class="l"> 432: </a>    <span class="php-comment">/**
</span><a href="#433" id="433" class="l"> 433: </a><span class="php-comment">     * Returns current layout name.
</span><a href="#434" id="434" class="l"> 434: </a><span class="php-comment">     * @return string|FALSE
</span><a href="#435" id="435" class="l"> 435: </a><span class="php-comment">     */</span>
<a href="#436" id="436" class="l"> 436: </a>    <span class="php-keyword1">final</span> <span class="php-keyword1">public</span> <span class="php-keyword1">function</span> getLayout()
<a href="#437" id="437" class="l"> 437: </a>    {
<a href="#438" id="438" class="l"> 438: </a>        <span class="php-keyword1">return</span> <span class="php-var">$this</span>-&gt;layout;
<a href="#439" id="439" class="l"> 439: </a>    }
<a href="#440" id="440" class="l"> 440: </a>
<a href="#441" id="441" class="l"> 441: </a>
<a href="#442" id="442" class="l"> 442: </a>
<a href="#443" id="443" class="l"> 443: </a>    <span class="php-comment">/**
</span><a href="#444" id="444" class="l"> 444: </a><span class="php-comment">     * Changes or disables layout.
</span><a href="#445" id="445" class="l"> 445: </a><span class="php-comment">     * @param  string|FALSE
</span><a href="#446" id="446" class="l"> 446: </a><span class="php-comment">     * @return Presenter  provides a fluent interface
</span><a href="#447" id="447" class="l"> 447: </a><span class="php-comment">     */</span>
<a href="#448" id="448" class="l"> 448: </a>    <span class="php-keyword1">public</span> <span class="php-keyword1">function</span> setLayout(<span class="php-var">$layout</span>)
<a href="#449" id="449" class="l"> 449: </a>    {
<a href="#450" id="450" class="l"> 450: </a>        <span class="php-var">$this</span>-&gt;layout = <span class="php-var">$layout</span> === <span class="php-keyword1">FALSE</span> ? <span class="php-keyword1">FALSE</span> : (string) <span class="php-var">$layout</span>;
<a href="#451" id="451" class="l"> 451: </a>        <span class="php-keyword1">return</span> <span class="php-var">$this</span>;
<a href="#452" id="452" class="l"> 452: </a>    }
<a href="#453" id="453" class="l"> 453: </a>
<a href="#454" id="454" class="l"> 454: </a>
<a href="#455" id="455" class="l"> 455: </a>
<a href="#456" id="456" class="l"> 456: </a>    <span class="php-comment">/**
</span><a href="#457" id="457" class="l"> 457: </a><span class="php-comment">     * @return void
</span><a href="#458" id="458" class="l"> 458: </a><span class="php-comment">     * @throws BadRequestException if no template found
</span><a href="#459" id="459" class="l"> 459: </a><span class="php-comment">     * @throws AbortException
</span><a href="#460" id="460" class="l"> 460: </a><span class="php-comment">     */</span>
<a href="#461" id="461" class="l"> 461: </a>    <span class="php-keyword1">public</span> <span class="php-keyword1">function</span> sendTemplate()
<a href="#462" id="462" class="l"> 462: </a>    {
<a href="#463" id="463" class="l"> 463: </a>        <span class="php-var">$template</span> = <span class="php-var">$this</span>-&gt;getTemplate();
<a href="#464" id="464" class="l"> 464: </a>        <span class="php-keyword1">if</span> (!<span class="php-var">$template</span>) <span class="php-keyword1">return</span>;
<a href="#465" id="465" class="l"> 465: </a>
<a href="#466" id="466" class="l"> 466: </a>        <span class="php-keyword1">if</span> (<span class="php-var">$template</span> <span class="php-keyword1">instanceof</span> Nette\Templates\IFileTemplate &amp;&amp; !<span class="php-var">$template</span>-&gt;getFile()) {
<a href="#467" id="467" class="l"> 467: </a>
<a href="#468" id="468" class="l"> 468: </a>            <span class="php-comment">// content template
</span><a href="#469" id="469" class="l"> 469: </a>            <span class="php-var">$files</span> = <span class="php-var">$this</span>-&gt;formatTemplateFiles(<span class="php-var">$this</span>-&gt;getName(), <span class="php-var">$this</span>-&gt;view);
<a href="#470" id="470" class="l"> 470: </a>            <span class="php-keyword1">foreach</span> (<span class="php-var">$files</span> as <span class="php-var">$file</span>) {
<a href="#471" id="471" class="l"> 471: </a>                <span class="php-keyword1">if</span> (<span class="php-keyword2">is_file</span>(<span class="php-var">$file</span>)) {
<a href="#472" id="472" class="l"> 472: </a>                    <span class="php-var">$template</span>-&gt;setFile(<span class="php-var">$file</span>);
<a href="#473" id="473" class="l"> 473: </a>                    <span class="php-keyword1">break</span>;
<a href="#474" id="474" class="l"> 474: </a>                }
<a href="#475" id="475" class="l"> 475: </a>            }
<a href="#476" id="476" class="l"> 476: </a>
<a href="#477" id="477" class="l"> 477: </a>            <span class="php-keyword1">if</span> (!<span class="php-var">$template</span>-&gt;getFile()) {
<a href="#478" id="478" class="l"> 478: </a>                <span class="php-var">$file</span> = <span class="php-keyword2">str_replace</span>(Environment::getVariable(<span class="php-quote">'appDir'</span>), <span class="php-quote">&quot;\xE2\x80\xA6&quot;</span>, <span class="php-keyword2">reset</span>(<span class="php-var">$files</span>));
<a href="#479" id="479" class="l"> 479: </a>                <span class="php-keyword1">throw</span> <span class="php-keyword1">new</span> BadRequestException(<span class="php-quote">&quot;Page not found. Missing template '</span><span class="php-var">$file</span><span class="php-quote">'.&quot;</span>);
<a href="#480" id="480" class="l"> 480: </a>            }
<a href="#481" id="481" class="l"> 481: </a>
<a href="#482" id="482" class="l"> 482: </a>            <span class="php-comment">// layout template
</span><a href="#483" id="483" class="l"> 483: </a>            <span class="php-keyword1">if</span> (<span class="php-var">$this</span>-&gt;layout !== <span class="php-keyword1">FALSE</span>) {
<a href="#484" id="484" class="l"> 484: </a>                <span class="php-var">$files</span> = <span class="php-var">$this</span>-&gt;formatLayoutTemplateFiles(<span class="php-var">$this</span>-&gt;getName(), <span class="php-var">$this</span>-&gt;layout ? <span class="php-var">$this</span>-&gt;layout : <span class="php-quote">'layout'</span>);
<a href="#485" id="485" class="l"> 485: </a>                <span class="php-keyword1">foreach</span> (<span class="php-var">$files</span> as <span class="php-var">$file</span>) {
<a href="#486" id="486" class="l"> 486: </a>                    <span class="php-keyword1">if</span> (<span class="php-keyword2">is_file</span>(<span class="php-var">$file</span>)) {
<a href="#487" id="487" class="l"> 487: </a>                        <span class="php-var">$template</span>-&gt;layout = <span class="php-var">$file</span>;
<a href="#488" id="488" class="l"> 488: </a>                        <span class="php-keyword1">if</span> (<span class="php-var">$this</span>-&gt;oldLayoutMode) {
<a href="#489" id="489" class="l"> 489: </a>                            <span class="php-var">$template</span>-&gt;content = <span class="php-keyword1">clone</span> <span class="php-var">$template</span>;
<a href="#490" id="490" class="l"> 490: </a>                            <span class="php-var">$template</span>-&gt;setFile(<span class="php-var">$file</span>);
<a href="#491" id="491" class="l"> 491: </a>                        } <span class="php-keyword1">else</span> {
<a href="#492" id="492" class="l"> 492: </a>                            <span class="php-var">$template</span>-&gt;_<span class="php-keyword1">extends</span> = <span class="php-var">$file</span>;
<a href="#493" id="493" class="l"> 493: </a>                        }
<a href="#494" id="494" class="l"> 494: </a>                        <span class="php-keyword1">break</span>;
<a href="#495" id="495" class="l"> 495: </a>                    }
<a href="#496" id="496" class="l"> 496: </a>                }
<a href="#497" id="497" class="l"> 497: </a>
<a href="#498" id="498" class="l"> 498: </a>                <span class="php-keyword1">if</span> (<span class="php-keyword1">empty</span>(<span class="php-var">$template</span>-&gt;layout) &amp;&amp; <span class="php-var">$this</span>-&gt;layout !== <span class="php-keyword1">NULL</span>) {
<a href="#499" id="499" class="l"> 499: </a>                    <span class="php-var">$file</span> = <span class="php-keyword2">str_replace</span>(Environment::getVariable(<span class="php-quote">'appDir'</span>), <span class="php-quote">&quot;\xE2\x80\xA6&quot;</span>, <span class="php-keyword2">reset</span>(<span class="php-var">$files</span>));
<a href="#500" id="500" class="l"> 500: </a>                    <span class="php-keyword1">throw</span> <span class="php-keyword1">new</span> \FileNotFoundException(<span class="php-quote">&quot;Layout not found. Missing template '</span><span class="php-var">$file</span><span class="php-quote">'.&quot;</span>);
<a href="#501" id="501" class="l"> 501: </a>                }
<a href="#502" id="502" class="l"> 502: </a>            }
<a href="#503" id="503" class="l"> 503: </a>        }
<a href="#504" id="504" class="l"> 504: </a>
<a href="#505" id="505" class="l"> 505: </a>        <span class="php-var">$this</span>-&gt;terminate(<span class="php-keyword1">new</span> RenderResponse(<span class="php-var">$template</span>));
<a href="#506" id="506" class="l"> 506: </a>    }
<a href="#507" id="507" class="l"> 507: </a>
<a href="#508" id="508" class="l"> 508: </a>
<a href="#509" id="509" class="l"> 509: </a>
<a href="#510" id="510" class="l"> 510: </a>    <span class="php-comment">/**
</span><a href="#511" id="511" class="l"> 511: </a><span class="php-comment">     * Formats layout template file names.
</span><a href="#512" id="512" class="l"> 512: </a><span class="php-comment">     * @param  string
</span><a href="#513" id="513" class="l"> 513: </a><span class="php-comment">     * @param  string
</span><a href="#514" id="514" class="l"> 514: </a><span class="php-comment">     * @return array
</span><a href="#515" id="515" class="l"> 515: </a><span class="php-comment">     */</span>
<a href="#516" id="516" class="l"> 516: </a>    <span class="php-keyword1">public</span> <span class="php-keyword1">function</span> formatLayoutTemplateFiles(<span class="php-var">$presenter</span>, <span class="php-var">$layout</span>)
<a href="#517" id="517" class="l"> 517: </a>    {
<a href="#518" id="518" class="l"> 518: </a>        <span class="php-keyword1">if</span> (<span class="php-var">$this</span>-&gt;oldModuleMode) {
<a href="#519" id="519" class="l"> 519: </a>            <span class="php-var">$root</span> = Environment::getVariable(<span class="php-quote">'templatesDir'</span>, Environment::getVariable(<span class="php-quote">'appDir'</span>) . <span class="php-quote">'/templates'</span>); <span class="php-comment">// back compatibility
</span><a href="#520" id="520" class="l"> 520: </a>            <span class="php-var">$presenter</span> = <span class="php-keyword2">str_replace</span>(<span class="php-quote">':'</span>, <span class="php-quote">'Module/'</span>, <span class="php-var">$presenter</span>);
<a href="#521" id="521" class="l"> 521: </a>            <span class="php-var">$module</span> = <span class="php-keyword2">substr</span>(<span class="php-var">$presenter</span>, <span class="php-num">0</span>, (int) <span class="php-keyword2">strrpos</span>(<span class="php-var">$presenter</span>, <span class="php-quote">'/'</span>));
<a href="#522" id="522" class="l"> 522: </a>            <span class="php-var">$base</span> = <span class="php-quote">''</span>;
<a href="#523" id="523" class="l"> 523: </a>            <span class="php-keyword1">if</span> (<span class="php-var">$root</span> === Environment::getVariable(<span class="php-quote">'appDir'</span>) . <span class="php-quote">'/presenters'</span>) {
<a href="#524" id="524" class="l"> 524: </a>                <span class="php-var">$base</span> = <span class="php-quote">'templates/'</span>;
<a href="#525" id="525" class="l"> 525: </a>                <span class="php-keyword1">if</span> (<span class="php-var">$module</span> === <span class="php-quote">''</span>) {
<a href="#526" id="526" class="l"> 526: </a>                    <span class="php-var">$presenter</span> = <span class="php-quote">'templates/'</span> . <span class="php-var">$presenter</span>;
<a href="#527" id="527" class="l"> 527: </a>                } <span class="php-keyword1">else</span> {
<a href="#528" id="528" class="l"> 528: </a>                    <span class="php-var">$presenter</span> = <span class="php-keyword2">substr_replace</span>(<span class="php-var">$presenter</span>, <span class="php-quote">'/templates'</span>, <span class="php-keyword2">strrpos</span>(<span class="php-var">$presenter</span>, <span class="php-quote">'/'</span>), <span class="php-num">0</span>);
<a href="#529" id="529" class="l"> 529: </a>                }
<a href="#530" id="530" class="l"> 530: </a>            }
<a href="#531" id="531" class="l"> 531: </a>            <span class="php-keyword1">return</span> <span class="php-keyword1">array</span>(
<a href="#532" id="532" class="l"> 532: </a>                <span class="php-quote">&quot;</span><span class="php-var">$root</span><span class="php-quote">/</span><span class="php-var">$presenter</span><span class="php-quote">/@</span><span class="php-var">$layout</span><span class="php-quote">.phtml&quot;</span>,
<a href="#533" id="533" class="l"> 533: </a>                <span class="php-quote">&quot;</span><span class="php-var">$root</span><span class="php-quote">/</span><span class="php-var">$presenter</span><span class="php-quote">.@</span><span class="php-var">$layout</span><span class="php-quote">.phtml&quot;</span>,
<a href="#534" id="534" class="l"> 534: </a>                <span class="php-quote">&quot;</span><span class="php-var">$root</span><span class="php-quote">/</span><span class="php-var">$module</span><span class="php-quote">/</span><span class="php-var">$base</span><span class="php-quote">@</span><span class="php-var">$layout</span><span class="php-quote">.phtml&quot;</span>,
<a href="#535" id="535" class="l"> 535: </a>                <span class="php-quote">&quot;</span><span class="php-var">$root</span><span class="php-quote">/</span><span class="php-var">$base</span><span class="php-quote">@</span><span class="php-var">$layout</span><span class="php-quote">.phtml&quot;</span>,
<a href="#536" id="536" class="l"> 536: </a>            );
<a href="#537" id="537" class="l"> 537: </a>        }
<a href="#538" id="538" class="l"> 538: </a>
<a href="#539" id="539" class="l"> 539: </a>        <span class="php-var">$appDir</span> = Environment::getVariable(<span class="php-quote">'appDir'</span>);
<a href="#540" id="540" class="l"> 540: </a>        <span class="php-var">$path</span> = <span class="php-quote">'/'</span> . <span class="php-keyword2">str_replace</span>(<span class="php-quote">':'</span>, <span class="php-quote">'Module/'</span>, <span class="php-var">$presenter</span>);
<a href="#541" id="541" class="l"> 541: </a>        <span class="php-var">$pathP</span> = <span class="php-keyword2">substr_replace</span>(<span class="php-var">$path</span>, <span class="php-quote">'/templates'</span>, <span class="php-keyword2">strrpos</span>(<span class="php-var">$path</span>, <span class="php-quote">'/'</span>), <span class="php-num">0</span>);
<a href="#542" id="542" class="l"> 542: </a>        <span class="php-var">$list</span> = <span class="php-keyword1">array</span>(
<a href="#543" id="543" class="l"> 543: </a>            <span class="php-quote">&quot;</span><span class="php-var">$appDir$pathP</span><span class="php-quote">/@</span><span class="php-var">$layout</span><span class="php-quote">.phtml&quot;</span>,
<a href="#544" id="544" class="l"> 544: </a>            <span class="php-quote">&quot;</span><span class="php-var">$appDir$pathP</span><span class="php-quote">.@</span><span class="php-var">$layout</span><span class="php-quote">.phtml&quot;</span>,
<a href="#545" id="545" class="l"> 545: </a>        );
<a href="#546" id="546" class="l"> 546: </a>        <span class="php-keyword1">while</span> ((<span class="php-var">$path</span> = <span class="php-keyword2">substr</span>(<span class="php-var">$path</span>, <span class="php-num">0</span>, <span class="php-keyword2">strrpos</span>(<span class="php-var">$path</span>, <span class="php-quote">'/'</span>))) !== <span class="php-keyword1">FALSE</span>) {
<a href="#547" id="547" class="l"> 547: </a>            <span class="php-var">$list</span>[] = <span class="php-quote">&quot;</span><span class="php-var">$appDir$path</span><span class="php-quote">/templates/@</span><span class="php-var">$layout</span><span class="php-quote">.phtml&quot;</span>;
<a href="#548" id="548" class="l"> 548: </a>        }
<a href="#549" id="549" class="l"> 549: </a>        <span class="php-keyword1">return</span> <span class="php-var">$list</span>;
<a href="#550" id="550" class="l"> 550: </a>    }
<a href="#551" id="551" class="l"> 551: </a>
<a href="#552" id="552" class="l"> 552: </a>
<a href="#553" id="553" class="l"> 553: </a>
<a href="#554" id="554" class="l"> 554: </a>    <span class="php-comment">/**
</span><a href="#555" id="555" class="l"> 555: </a><span class="php-comment">     * Formats view template file names.
</span><a href="#556" id="556" class="l"> 556: </a><span class="php-comment">     * @param  string
</span><a href="#557" id="557" class="l"> 557: </a><span class="php-comment">     * @param  string
</span><a href="#558" id="558" class="l"> 558: </a><span class="php-comment">     * @return array
</span><a href="#559" id="559" class="l"> 559: </a><span class="php-comment">     */</span>
<a href="#560" id="560" class="l"> 560: </a>    <span class="php-keyword1">public</span> <span class="php-keyword1">function</span> formatTemplateFiles(<span class="php-var">$presenter</span>, <span class="php-var">$view</span>)
<a href="#561" id="561" class="l"> 561: </a>    {
<a href="#562" id="562" class="l"> 562: </a>        <span class="php-keyword1">if</span> (<span class="php-var">$this</span>-&gt;oldModuleMode) {
<a href="#563" id="563" class="l"> 563: </a>            <span class="php-var">$root</span> = Environment::getVariable(<span class="php-quote">'templatesDir'</span>, Environment::getVariable(<span class="php-quote">'appDir'</span>) . <span class="php-quote">'/templates'</span>); <span class="php-comment">// back compatibility
</span><a href="#564" id="564" class="l"> 564: </a>            <span class="php-var">$presenter</span> = <span class="php-keyword2">str_replace</span>(<span class="php-quote">':'</span>, <span class="php-quote">'Module/'</span>, <span class="php-var">$presenter</span>);
<a href="#565" id="565" class="l"> 565: </a>            <span class="php-var">$dir</span> = <span class="php-quote">''</span>;
<a href="#566" id="566" class="l"> 566: </a>            <span class="php-keyword1">if</span> (<span class="php-var">$root</span> === Environment::getVariable(<span class="php-quote">'appDir'</span>) . <span class="php-quote">'/presenters'</span>) { <span class="php-comment">// special supported case
</span><a href="#567" id="567" class="l"> 567: </a>                <span class="php-var">$pos</span> = <span class="php-keyword2">strrpos</span>(<span class="php-var">$presenter</span>, <span class="php-quote">'/'</span>);
<a href="#568" id="568" class="l"> 568: </a>                <span class="php-var">$presenter</span> = <span class="php-var">$pos</span> === <span class="php-keyword1">FALSE</span> ? <span class="php-quote">'templates/'</span> . <span class="php-var">$presenter</span> : <span class="php-keyword2">substr_replace</span>(<span class="php-var">$presenter</span>, <span class="php-quote">'/templates'</span>, <span class="php-var">$pos</span>, <span class="php-num">0</span>);
<a href="#569" id="569" class="l"> 569: </a>                <span class="php-var">$dir</span> = <span class="php-quote">'templates/'</span>;
<a href="#570" id="570" class="l"> 570: </a>            }
<a href="#571" id="571" class="l"> 571: </a>            <span class="php-keyword1">return</span> <span class="php-keyword1">array</span>(
<a href="#572" id="572" class="l"> 572: </a>                <span class="php-quote">&quot;</span><span class="php-var">$root</span><span class="php-quote">/</span><span class="php-var">$presenter</span><span class="php-quote">/</span><span class="php-var">$view</span><span class="php-quote">.phtml&quot;</span>,
<a href="#573" id="573" class="l"> 573: </a>                <span class="php-quote">&quot;</span><span class="php-var">$root</span><span class="php-quote">/</span><span class="php-var">$presenter</span><span class="php-quote">.</span><span class="php-var">$view</span><span class="php-quote">.phtml&quot;</span>,
<a href="#574" id="574" class="l"> 574: </a>                <span class="php-quote">&quot;</span><span class="php-var">$root</span><span class="php-quote">/</span><span class="php-var">$dir</span><span class="php-quote">@global.</span><span class="php-var">$view</span><span class="php-quote">.phtml&quot;</span>,
<a href="#575" id="575" class="l"> 575: </a>            );
<a href="#576" id="576" class="l"> 576: </a>        }
<a href="#577" id="577" class="l"> 577: </a>
<a href="#578" id="578" class="l"> 578: </a>        <span class="php-var">$appDir</span> = Environment::getVariable(<span class="php-quote">'appDir'</span>);
<a href="#579" id="579" class="l"> 579: </a>        <span class="php-var">$path</span> = <span class="php-quote">'/'</span> . <span class="php-keyword2">str_replace</span>(<span class="php-quote">':'</span>, <span class="php-quote">'Module/'</span>, <span class="php-var">$presenter</span>);
<a href="#580" id="580" class="l"> 580: </a>        <span class="php-var">$pathP</span> = <span class="php-keyword2">substr_replace</span>(<span class="php-var">$path</span>, <span class="php-quote">'/templates'</span>, <span class="php-keyword2">strrpos</span>(<span class="php-var">$path</span>, <span class="php-quote">'/'</span>), <span class="php-num">0</span>);
<a href="#581" id="581" class="l"> 581: </a>        <span class="php-var">$path</span> = <span class="php-keyword2">substr_replace</span>(<span class="php-var">$path</span>, <span class="php-quote">'/templates'</span>, <span class="php-keyword2">strrpos</span>(<span class="php-var">$path</span>, <span class="php-quote">'/'</span>));
<a href="#582" id="582" class="l"> 582: </a>        <span class="php-keyword1">return</span> <span class="php-keyword1">array</span>(
<a href="#583" id="583" class="l"> 583: </a>            <span class="php-quote">&quot;</span><span class="php-var">$appDir$pathP</span><span class="php-quote">/</span><span class="php-var">$view</span><span class="php-quote">.phtml&quot;</span>,
<a href="#584" id="584" class="l"> 584: </a>            <span class="php-quote">&quot;</span><span class="php-var">$appDir$pathP</span><span class="php-quote">.</span><span class="php-var">$view</span><span class="php-quote">.phtml&quot;</span>,
<a href="#585" id="585" class="l"> 585: </a>            <span class="php-quote">&quot;</span><span class="php-var">$appDir$path</span><span class="php-quote">/@global.</span><span class="php-var">$view</span><span class="php-quote">.phtml&quot;</span>,
<a href="#586" id="586" class="l"> 586: </a>        );
<a href="#587" id="587" class="l"> 587: </a>    }
<a href="#588" id="588" class="l"> 588: </a>
<a href="#589" id="589" class="l"> 589: </a>
<a href="#590" id="590" class="l"> 590: </a>
<a href="#591" id="591" class="l"> 591: </a>    <span class="php-comment">/**
</span><a href="#592" id="592" class="l"> 592: </a><span class="php-comment">     * Formats action method name.
</span><a href="#593" id="593" class="l"> 593: </a><span class="php-comment">     * @param  string
</span><a href="#594" id="594" class="l"> 594: </a><span class="php-comment">     * @return string
</span><a href="#595" id="595" class="l"> 595: </a><span class="php-comment">     */</span>
<a href="#596" id="596" class="l"> 596: </a>    <span class="php-keyword1">protected</span> <span class="php-keyword1">static</span> <span class="php-keyword1">function</span> formatActionMethod(<span class="php-var">$action</span>)
<a href="#597" id="597" class="l"> 597: </a>    {
<a href="#598" id="598" class="l"> 598: </a>        <span class="php-keyword1">return</span> <span class="php-quote">'action'</span> . <span class="php-var">$action</span>;
<a href="#599" id="599" class="l"> 599: </a>    }
<a href="#600" id="600" class="l"> 600: </a>
<a href="#601" id="601" class="l"> 601: </a>
<a href="#602" id="602" class="l"> 602: </a>
<a href="#603" id="603" class="l"> 603: </a>    <span class="php-comment">/**
</span><a href="#604" id="604" class="l"> 604: </a><span class="php-comment">     * Formats render view method name.
</span><a href="#605" id="605" class="l"> 605: </a><span class="php-comment">     * @param  string
</span><a href="#606" id="606" class="l"> 606: </a><span class="php-comment">     * @return string
</span><a href="#607" id="607" class="l"> 607: </a><span class="php-comment">     */</span>
<a href="#608" id="608" class="l"> 608: </a>    <span class="php-keyword1">protected</span> <span class="php-keyword1">static</span> <span class="php-keyword1">function</span> formatRenderMethod(<span class="php-var">$view</span>)
<a href="#609" id="609" class="l"> 609: </a>    {
<a href="#610" id="610" class="l"> 610: </a>        <span class="php-keyword1">return</span> <span class="php-quote">'render'</span> . <span class="php-var">$view</span>;
<a href="#611" id="611" class="l"> 611: </a>    }
<a href="#612" id="612" class="l"> 612: </a>
<a href="#613" id="613" class="l"> 613: </a>
<a href="#614" id="614" class="l"> 614: </a>
<a href="#615" id="615" class="l"> 615: </a>    <span class="php-comment">/**
</span><a href="#616" id="616" class="l"> 616: </a><span class="php-comment">     * @deprecated
</span><a href="#617" id="617" class="l"> 617: </a><span class="php-comment">     */</span>
<a href="#618" id="618" class="l"> 618: </a>    <span class="php-keyword1">protected</span> <span class="php-keyword1">function</span> renderTemplate()
<a href="#619" id="619" class="l"> 619: </a>    {
<a href="#620" id="620" class="l"> 620: </a>        <span class="php-keyword1">throw</span> <span class="php-keyword1">new</span> \DeprecatedException(__METHOD__ . <span class="php-quote">'() is deprecated; use $presenter-&gt;sendTemplate() instead.'</span>);
<a href="#621" id="621" class="l"> 621: </a>    }
<a href="#622" id="622" class="l"> 622: </a>
<a href="#623" id="623" class="l"> 623: </a>
<a href="#624" id="624" class="l"> 624: </a>
<a href="#625" id="625" class="l"> 625: </a>    <span class="php-comment">/********************* partial AJAX rendering ****************d*g**/</span>
<a href="#626" id="626" class="l"> 626: </a>
<a href="#627" id="627" class="l"> 627: </a>
<a href="#628" id="628" class="l"> 628: </a>
<a href="#629" id="629" class="l"> 629: </a>    <span class="php-comment">/**
</span><a href="#630" id="630" class="l"> 630: </a><span class="php-comment">     * @return stdClass
</span><a href="#631" id="631" class="l"> 631: </a><span class="php-comment">     */</span>
<a href="#632" id="632" class="l"> 632: </a>    <span class="php-keyword1">final</span> <span class="php-keyword1">public</span> <span class="php-keyword1">function</span> getPayload()
<a href="#633" id="633" class="l"> 633: </a>    {
<a href="#634" id="634" class="l"> 634: </a>        <span class="php-keyword1">return</span> <span class="php-var">$this</span>-&gt;payload;
<a href="#635" id="635" class="l"> 635: </a>    }
<a href="#636" id="636" class="l"> 636: </a>
<a href="#637" id="637" class="l"> 637: </a>
<a href="#638" id="638" class="l"> 638: </a>
<a href="#639" id="639" class="l"> 639: </a>    <span class="php-comment">/**
</span><a href="#640" id="640" class="l"> 640: </a><span class="php-comment">     * Is AJAX request?
</span><a href="#641" id="641" class="l"> 641: </a><span class="php-comment">     * @return bool
</span><a href="#642" id="642" class="l"> 642: </a><span class="php-comment">     */</span>
<a href="#643" id="643" class="l"> 643: </a>    <span class="php-keyword1">public</span> <span class="php-keyword1">function</span> isAjax()
<a href="#644" id="644" class="l"> 644: </a>    {
<a href="#645" id="645" class="l"> 645: </a>        <span class="php-keyword1">if</span> (<span class="php-var">$this</span>-&gt;ajaxMode === <span class="php-keyword1">NULL</span>) {
<a href="#646" id="646" class="l"> 646: </a>            <span class="php-var">$this</span>-&gt;ajaxMode = <span class="php-var">$this</span>-&gt;getHttpRequest()-&gt;isAjax();
<a href="#647" id="647" class="l"> 647: </a>        }
<a href="#648" id="648" class="l"> 648: </a>        <span class="php-keyword1">return</span> <span class="php-var">$this</span>-&gt;ajaxMode;
<a href="#649" id="649" class="l"> 649: </a>    }
<a href="#650" id="650" class="l"> 650: </a>
<a href="#651" id="651" class="l"> 651: </a>
<a href="#652" id="652" class="l"> 652: </a>
<a href="#653" id="653" class="l"> 653: </a>    <span class="php-comment">/**
</span><a href="#654" id="654" class="l"> 654: </a><span class="php-comment">     * Sends AJAX payload to the output.
</span><a href="#655" id="655" class="l"> 655: </a><span class="php-comment">     * @return void
</span><a href="#656" id="656" class="l"> 656: </a><span class="php-comment">     * @throws AbortException
</span><a href="#657" id="657" class="l"> 657: </a><span class="php-comment">     */</span>
<a href="#658" id="658" class="l"> 658: </a>    <span class="php-keyword1">public</span> <span class="php-keyword1">function</span> sendPayload()
<a href="#659" id="659" class="l"> 659: </a>    {
<a href="#660" id="660" class="l"> 660: </a>        <span class="php-var">$this</span>-&gt;terminate(<span class="php-keyword1">new</span> JsonResponse(<span class="php-var">$this</span>-&gt;payload));
<a href="#661" id="661" class="l"> 661: </a>    }
<a href="#662" id="662" class="l"> 662: </a>
<a href="#663" id="663" class="l"> 663: </a>
<a href="#664" id="664" class="l"> 664: </a>
<a href="#665" id="665" class="l"> 665: </a>    <span class="php-comment">/**
</span><a href="#666" id="666" class="l"> 666: </a><span class="php-comment">     * @deprecated
</span><a href="#667" id="667" class="l"> 667: </a><span class="php-comment">     */</span>
<a href="#668" id="668" class="l"> 668: </a>    <span class="php-keyword1">public</span> <span class="php-keyword1">function</span> getAjaxDriver()
<a href="#669" id="669" class="l"> 669: </a>    {
<a href="#670" id="670" class="l"> 670: </a>        <span class="php-keyword1">throw</span> <span class="php-keyword1">new</span> \DeprecatedException(__METHOD__ . <span class="php-quote">'() is deprecated; use $presenter-&gt;payload instead.'</span>);
<a href="#671" id="671" class="l"> 671: </a>    }
<a href="#672" id="672" class="l"> 672: </a>
<a href="#673" id="673" class="l"> 673: </a>
<a href="#674" id="674" class="l"> 674: </a>
<a href="#675" id="675" class="l"> 675: </a>    <span class="php-comment">/********************* navigation &amp; flow ****************d*g**/</span>
<a href="#676" id="676" class="l"> 676: </a>
<a href="#677" id="677" class="l"> 677: </a>
<a href="#678" id="678" class="l"> 678: </a>
<a href="#679" id="679" class="l"> 679: </a>    <span class="php-comment">/**
</span><a href="#680" id="680" class="l"> 680: </a><span class="php-comment">     * Forward to another presenter or action.
</span><a href="#681" id="681" class="l"> 681: </a><span class="php-comment">     * @param  string|PresenterRequest
</span><a href="#682" id="682" class="l"> 682: </a><span class="php-comment">     * @param  array|mixed
</span><a href="#683" id="683" class="l"> 683: </a><span class="php-comment">     * @return void
</span><a href="#684" id="684" class="l"> 684: </a><span class="php-comment">     * @throws AbortException
</span><a href="#685" id="685" class="l"> 685: </a><span class="php-comment">     */</span>
<a href="#686" id="686" class="l"> 686: </a>    <span class="php-keyword1">public</span> <span class="php-keyword1">function</span> forward(<span class="php-var">$destination</span>, <span class="php-var">$args</span> = <span class="php-keyword1">array</span>())
<a href="#687" id="687" class="l"> 687: </a>    {
<a href="#688" id="688" class="l"> 688: </a>        <span class="php-keyword1">if</span> (<span class="php-var">$destination</span> <span class="php-keyword1">instanceof</span> PresenterRequest) {
<a href="#689" id="689" class="l"> 689: </a>            <span class="php-var">$this</span>-&gt;terminate(<span class="php-keyword1">new</span> ForwardingResponse(<span class="php-var">$destination</span>));
<a href="#690" id="690" class="l"> 690: </a>
<a href="#691" id="691" class="l"> 691: </a>        } <span class="php-keyword1">elseif</span> (!<span class="php-keyword2">is_array</span>(<span class="php-var">$args</span>)) {
<a href="#692" id="692" class="l"> 692: </a>            <span class="php-var">$args</span> = <span class="php-keyword2">func_get_args</span>();
<a href="#693" id="693" class="l"> 693: </a>            <span class="php-keyword2">array_shift</span>(<span class="php-var">$args</span>);
<a href="#694" id="694" class="l"> 694: </a>        }
<a href="#695" id="695" class="l"> 695: </a>
<a href="#696" id="696" class="l"> 696: </a>        <span class="php-var">$this</span>-&gt;createRequest(<span class="php-var">$this</span>, <span class="php-var">$destination</span>, <span class="php-var">$args</span>, <span class="php-quote">'forward'</span>);
<a href="#697" id="697" class="l"> 697: </a>        <span class="php-var">$this</span>-&gt;terminate(<span class="php-keyword1">new</span> ForwardingResponse(<span class="php-var">$this</span>-&gt;lastCreatedRequest));
<a href="#698" id="698" class="l"> 698: </a>    }
<a href="#699" id="699" class="l"> 699: </a>
<a href="#700" id="700" class="l"> 700: </a>
<a href="#701" id="701" class="l"> 701: </a>
<a href="#702" id="702" class="l"> 702: </a>    <span class="php-comment">/**
</span><a href="#703" id="703" class="l"> 703: </a><span class="php-comment">     * Redirect to another URL and ends presenter execution.
</span><a href="#704" id="704" class="l"> 704: </a><span class="php-comment">     * @param  string
</span><a href="#705" id="705" class="l"> 705: </a><span class="php-comment">     * @param  int HTTP error code
</span><a href="#706" id="706" class="l"> 706: </a><span class="php-comment">     * @return void
</span><a href="#707" id="707" class="l"> 707: </a><span class="php-comment">     * @throws AbortException
</span><a href="#708" id="708" class="l"> 708: </a><span class="php-comment">     */</span>
<a href="#709" id="709" class="l"> 709: </a>    <span class="php-keyword1">public</span> <span class="php-keyword1">function</span> redirectUri(<span class="php-var">$uri</span>, <span class="php-var">$code</span> = <span class="php-keyword1">NULL</span>)
<a href="#710" id="710" class="l"> 710: </a>    {
<a href="#711" id="711" class="l"> 711: </a>        <span class="php-keyword1">if</span> (<span class="php-var">$this</span>-&gt;isAjax()) {
<a href="#712" id="712" class="l"> 712: </a>            <span class="php-var">$this</span>-&gt;payload-&gt;redirect = (string) <span class="php-var">$uri</span>;
<a href="#713" id="713" class="l"> 713: </a>            <span class="php-var">$this</span>-&gt;sendPayload();
<a href="#714" id="714" class="l"> 714: </a>
<a href="#715" id="715" class="l"> 715: </a>        } <span class="php-keyword1">elseif</span> (!<span class="php-var">$code</span>) {
<a href="#716" id="716" class="l"> 716: </a>            <span class="php-var">$code</span> = <span class="php-var">$this</span>-&gt;getHttpRequest()-&gt;isMethod(<span class="php-quote">'post'</span>) ? Nette\Web\IHttpResponse::S303_POST_GET : Nette\Web\IHttpResponse::S302_FOUND;
<a href="#717" id="717" class="l"> 717: </a>        }
<a href="#718" id="718" class="l"> 718: </a>        <span class="php-var">$this</span>-&gt;terminate(<span class="php-keyword1">new</span> RedirectingResponse(<span class="php-var">$uri</span>, <span class="php-var">$code</span>));
<a href="#719" id="719" class="l"> 719: </a>    }
<a href="#720" id="720" class="l"> 720: </a>
<a href="#721" id="721" class="l"> 721: </a>
<a href="#722" id="722" class="l"> 722: </a>
<a href="#723" id="723" class="l"> 723: </a>    <span class="php-comment">/**
</span><a href="#724" id="724" class="l"> 724: </a><span class="php-comment">     * Link to myself.
</span><a href="#725" id="725" class="l"> 725: </a><span class="php-comment">     * @return string
</span><a href="#726" id="726" class="l"> 726: </a><span class="php-comment">     */</span>
<a href="#727" id="727" class="l"> 727: </a>    <span class="php-keyword1">public</span> <span class="php-keyword1">function</span> backlink()
<a href="#728" id="728" class="l"> 728: </a>    {
<a href="#729" id="729" class="l"> 729: </a>        <span class="php-keyword1">return</span> <span class="php-var">$this</span>-&gt;getAction(<span class="php-keyword1">TRUE</span>);
<a href="#730" id="730" class="l"> 730: </a>    }
<a href="#731" id="731" class="l"> 731: </a>
<a href="#732" id="732" class="l"> 732: </a>
<a href="#733" id="733" class="l"> 733: </a>
<a href="#734" id="734" class="l"> 734: </a>    <span class="php-comment">/**
</span><a href="#735" id="735" class="l"> 735: </a><span class="php-comment">     * Returns the last created PresenterRequest.
</span><a href="#736" id="736" class="l"> 736: </a><span class="php-comment">     * @return PresenterRequest
</span><a href="#737" id="737" class="l"> 737: </a><span class="php-comment">     */</span>
<a href="#738" id="738" class="l"> 738: </a>    <span class="php-keyword1">public</span> <span class="php-keyword1">function</span> getLastCreatedRequest()
<a href="#739" id="739" class="l"> 739: </a>    {
<a href="#740" id="740" class="l"> 740: </a>        <span class="php-keyword1">return</span> <span class="php-var">$this</span>-&gt;lastCreatedRequest;
<a href="#741" id="741" class="l"> 741: </a>    }
<a href="#742" id="742" class="l"> 742: </a>
<a href="#743" id="743" class="l"> 743: </a>
<a href="#744" id="744" class="l"> 744: </a>
<a href="#745" id="745" class="l"> 745: </a>    <span class="php-comment">/**
</span><a href="#746" id="746" class="l"> 746: </a><span class="php-comment">     * Returns the last created PresenterRequest flag.
</span><a href="#747" id="747" class="l"> 747: </a><span class="php-comment">     * @param  string
</span><a href="#748" id="748" class="l"> 748: </a><span class="php-comment">     * @return bool
</span><a href="#749" id="749" class="l"> 749: </a><span class="php-comment">     */</span>
<a href="#750" id="750" class="l"> 750: </a>    <span class="php-keyword1">public</span> <span class="php-keyword1">function</span> getLastCreatedRequestFlag(<span class="php-var">$flag</span>)
<a href="#751" id="751" class="l"> 751: </a>    {
<a href="#752" id="752" class="l"> 752: </a>        <span class="php-keyword1">return</span> !<span class="php-keyword1">empty</span>(<span class="php-var">$this</span>-&gt;lastCreatedRequestFlag[<span class="php-var">$flag</span>]);
<a href="#753" id="753" class="l"> 753: </a>    }
<a href="#754" id="754" class="l"> 754: </a>
<a href="#755" id="755" class="l"> 755: </a>
<a href="#756" id="756" class="l"> 756: </a>
<a href="#757" id="757" class="l"> 757: </a>    <span class="php-comment">/**
</span><a href="#758" id="758" class="l"> 758: </a><span class="php-comment">     * Correctly terminates presenter.
</span><a href="#759" id="759" class="l"> 759: </a><span class="php-comment">     * @param  IPresenterResponse
</span><a href="#760" id="760" class="l"> 760: </a><span class="php-comment">     * @return void
</span><a href="#761" id="761" class="l"> 761: </a><span class="php-comment">     * @throws AbortException
</span><a href="#762" id="762" class="l"> 762: </a><span class="php-comment">     */</span>
<a href="#763" id="763" class="l"> 763: </a>    <span class="php-keyword1">public</span> <span class="php-keyword1">function</span> terminate(IPresenterResponse <span class="php-var">$response</span> = <span class="php-keyword1">NULL</span>)
<a href="#764" id="764" class="l"> 764: </a>    {
<a href="#765" id="765" class="l"> 765: </a>        <span class="php-var">$this</span>-&gt;response = <span class="php-var">$response</span>;
<a href="#766" id="766" class="l"> 766: </a>        <span class="php-keyword1">throw</span> <span class="php-keyword1">new</span> AbortException();
<a href="#767" id="767" class="l"> 767: </a>    }
<a href="#768" id="768" class="l"> 768: </a>
<a href="#769" id="769" class="l"> 769: </a>
<a href="#770" id="770" class="l"> 770: </a>
<a href="#771" id="771" class="l"> 771: </a>    <span class="php-comment">/**
</span><a href="#772" id="772" class="l"> 772: </a><span class="php-comment">     * Conditional redirect to canonicalized URI.
</span><a href="#773" id="773" class="l"> 773: </a><span class="php-comment">     * @return void
</span><a href="#774" id="774" class="l"> 774: </a><span class="php-comment">     * @throws AbortException
</span><a href="#775" id="775" class="l"> 775: </a><span class="php-comment">     */</span>
<a href="#776" id="776" class="l"> 776: </a>    <span class="php-keyword1">public</span> <span class="php-keyword1">function</span> canonicalize()
<a href="#777" id="777" class="l"> 777: </a>    {
<a href="#778" id="778" class="l"> 778: </a>        <span class="php-keyword1">if</span> (!<span class="php-var">$this</span>-&gt;isAjax() &amp;&amp; (<span class="php-var">$this</span>-&gt;request-&gt;isMethod(<span class="php-quote">'get'</span>) || <span class="php-var">$this</span>-&gt;request-&gt;isMethod(<span class="php-quote">'head'</span>))) {
<a href="#779" id="779" class="l"> 779: </a>            <span class="php-var">$uri</span> = <span class="php-var">$this</span>-&gt;createRequest(<span class="php-var">$this</span>, <span class="php-var">$this</span>-&gt;action, <span class="php-var">$this</span>-&gt;getGlobalState() + <span class="php-var">$this</span>-&gt;request-&gt;params, <span class="php-quote">'redirectX'</span>);
<a href="#780" id="780" class="l"> 780: </a>            <span class="php-keyword1">if</span> (<span class="php-var">$uri</span> !== <span class="php-keyword1">NULL</span> &amp;&amp; !<span class="php-var">$this</span>-&gt;getHttpRequest()-&gt;getUri()-&gt;isEqual(<span class="php-var">$uri</span>)) {
<a href="#781" id="781" class="l"> 781: </a>                <span class="php-var">$this</span>-&gt;terminate(<span class="php-keyword1">new</span> RedirectingResponse(<span class="php-var">$uri</span>, Nette\Web\IHttpResponse::S301_MOVED_PERMANENTLY));
<a href="#782" id="782" class="l"> 782: </a>            }
<a href="#783" id="783" class="l"> 783: </a>        }
<a href="#784" id="784" class="l"> 784: </a>    }
<a href="#785" id="785" class="l"> 785: </a>
<a href="#786" id="786" class="l"> 786: </a>
<a href="#787" id="787" class="l"> 787: </a>
<a href="#788" id="788" class="l"> 788: </a>    <span class="php-comment">/**
</span><a href="#789" id="789" class="l"> 789: </a><span class="php-comment">     * Attempts to cache the sent entity by its last modification date
</span><a href="#790" id="790" class="l"> 790: </a><span class="php-comment">     * @param  string|int|DateTime  last modified time
</span><a href="#791" id="791" class="l"> 791: </a><span class="php-comment">     * @param  string strong entity tag validator
</span><a href="#792" id="792" class="l"> 792: </a><span class="php-comment">     * @param  mixed  optional expiration time
</span><a href="#793" id="793" class="l"> 793: </a><span class="php-comment">     * @return void
</span><a href="#794" id="794" class="l"> 794: </a><span class="php-comment">     * @throws AbortException
</span><a href="#795" id="795" class="l"> 795: </a><span class="php-comment">     * @deprecated
</span><a href="#796" id="796" class="l"> 796: </a><span class="php-comment">     */</span>
<a href="#797" id="797" class="l"> 797: </a>    <span class="php-keyword1">public</span> <span class="php-keyword1">function</span> lastModified(<span class="php-var">$lastModified</span>, <span class="php-var">$etag</span> = <span class="php-keyword1">NULL</span>, <span class="php-var">$expire</span> = <span class="php-keyword1">NULL</span>)
<a href="#798" id="798" class="l"> 798: </a>    {
<a href="#799" id="799" class="l"> 799: </a>        <span class="php-keyword1">if</span> (!Environment::isProduction()) {
<a href="#800" id="800" class="l"> 800: </a>            <span class="php-keyword1">return</span>;
<a href="#801" id="801" class="l"> 801: </a>        }
<a href="#802" id="802" class="l"> 802: </a>
<a href="#803" id="803" class="l"> 803: </a>        <span class="php-keyword1">if</span> (<span class="php-var">$expire</span> !== <span class="php-keyword1">NULL</span>) {
<a href="#804" id="804" class="l"> 804: </a>            <span class="php-var">$this</span>-&gt;getHttpResponse()-&gt;setExpiration(<span class="php-var">$expire</span>);
<a href="#805" id="805" class="l"> 805: </a>        }
<a href="#806" id="806" class="l"> 806: </a>
<a href="#807" id="807" class="l"> 807: </a>        <span class="php-keyword1">if</span> (!<span class="php-var">$this</span>-&gt;getHttpContext()-&gt;isModified(<span class="php-var">$lastModified</span>, <span class="php-var">$etag</span>)) {
<a href="#808" id="808" class="l"> 808: </a>            <span class="php-var">$this</span>-&gt;terminate();
<a href="#809" id="809" class="l"> 809: </a>        }
<a href="#810" id="810" class="l"> 810: </a>    }
<a href="#811" id="811" class="l"> 811: </a>
<a href="#812" id="812" class="l"> 812: </a>
<a href="#813" id="813" class="l"> 813: </a>
<a href="#814" id="814" class="l"> 814: </a>    <span class="php-comment">/**
</span><a href="#815" id="815" class="l"> 815: </a><span class="php-comment">     * PresenterRequest/URL factory.
</span><a href="#816" id="816" class="l"> 816: </a><span class="php-comment">     * @param  PresenterComponent  base
</span><a href="#817" id="817" class="l"> 817: </a><span class="php-comment">     * @param  string   destination in format &quot;[[module:]presenter:]action&quot; or &quot;signal!&quot; or &quot;this&quot;
</span><a href="#818" id="818" class="l"> 818: </a><span class="php-comment">     * @param  array    array of arguments
</span><a href="#819" id="819" class="l"> 819: </a><span class="php-comment">     * @param  string   forward|redirect|link
</span><a href="#820" id="820" class="l"> 820: </a><span class="php-comment">     * @return string   URL
</span><a href="#821" id="821" class="l"> 821: </a><span class="php-comment">     * @throws InvalidLinkException
</span><a href="#822" id="822" class="l"> 822: </a><span class="php-comment">     * @internal
</span><a href="#823" id="823" class="l"> 823: </a><span class="php-comment">     */</span>
<a href="#824" id="824" class="l"> 824: </a>    <span class="php-keyword1">final</span> <span class="php-keyword1">protected</span> <span class="php-keyword1">function</span> createRequest(<span class="php-var">$component</span>, <span class="php-var">$destination</span>, <span class="php-keyword1">array</span> <span class="php-var">$args</span>, <span class="php-var">$mode</span>)
<a href="#825" id="825" class="l"> 825: </a>    {
<a href="#826" id="826" class="l"> 826: </a>        <span class="php-comment">// note: createRequest supposes that saveState(), run() &amp; tryCall() behaviour is final
</span><a href="#827" id="827" class="l"> 827: </a>
<a href="#828" id="828" class="l"> 828: </a>        <span class="php-comment">// cached services for better performance
</span><a href="#829" id="829" class="l"> 829: </a>        <span class="php-keyword1">static</span> <span class="php-var">$presenterLoader</span>, <span class="php-var">$router</span>, <span class="php-var">$httpRequest</span>;
<a href="#830" id="830" class="l"> 830: </a>        <span class="php-keyword1">if</span> (<span class="php-var">$presenterLoader</span> === <span class="php-keyword1">NULL</span>) {
<a href="#831" id="831" class="l"> 831: </a>            <span class="php-var">$presenterLoader</span> = <span class="php-var">$this</span>-&gt;getApplication()-&gt;getPresenterLoader();
<a href="#832" id="832" class="l"> 832: </a>            <span class="php-var">$router</span> = <span class="php-var">$this</span>-&gt;getApplication()-&gt;getRouter();
<a href="#833" id="833" class="l"> 833: </a>            <span class="php-var">$httpRequest</span> = <span class="php-var">$this</span>-&gt;getHttpRequest();
<a href="#834" id="834" class="l"> 834: </a>        }
<a href="#835" id="835" class="l"> 835: </a>
<a href="#836" id="836" class="l"> 836: </a>        <span class="php-var">$this</span>-&gt;lastCreatedRequest = <span class="php-var">$this</span>-&gt;lastCreatedRequestFlag = <span class="php-keyword1">NULL</span>;
<a href="#837" id="837" class="l"> 837: </a>
<a href="#838" id="838" class="l"> 838: </a>        <span class="php-comment">// PARSE DESTINATION
</span><a href="#839" id="839" class="l"> 839: </a>        <span class="php-comment">// 1) fragment
</span><a href="#840" id="840" class="l"> 840: </a>        <span class="php-var">$a</span> = <span class="php-keyword2">strpos</span>(<span class="php-var">$destination</span>, <span class="php-quote">'#'</span>);
<a href="#841" id="841" class="l"> 841: </a>        <span class="php-keyword1">if</span> (<span class="php-var">$a</span> === <span class="php-keyword1">FALSE</span>) {
<a href="#842" id="842" class="l"> 842: </a>            <span class="php-var">$fragment</span> = <span class="php-quote">''</span>;
<a href="#843" id="843" class="l"> 843: </a>        } <span class="php-keyword1">else</span> {
<a href="#844" id="844" class="l"> 844: </a>            <span class="php-var">$fragment</span> = <span class="php-keyword2">substr</span>(<span class="php-var">$destination</span>, <span class="php-var">$a</span>);
<a href="#845" id="845" class="l"> 845: </a>            <span class="php-var">$destination</span> = <span class="php-keyword2">substr</span>(<span class="php-var">$destination</span>, <span class="php-num">0</span>, <span class="php-var">$a</span>);
<a href="#846" id="846" class="l"> 846: </a>        }
<a href="#847" id="847" class="l"> 847: </a>
<a href="#848" id="848" class="l"> 848: </a>        <span class="php-comment">// 2) ?query syntax
</span><a href="#849" id="849" class="l"> 849: </a>        <span class="php-var">$a</span> = <span class="php-keyword2">strpos</span>(<span class="php-var">$destination</span>, <span class="php-quote">'?'</span>);
<a href="#850" id="850" class="l"> 850: </a>        <span class="php-keyword1">if</span> (<span class="php-var">$a</span> !== <span class="php-keyword1">FALSE</span>) {
<a href="#851" id="851" class="l"> 851: </a>            <span class="php-keyword2">parse_str</span>(<span class="php-keyword2">substr</span>(<span class="php-var">$destination</span>, <span class="php-var">$a</span> + <span class="php-num">1</span>), <span class="php-var">$args</span>); <span class="php-comment">// requires disabled magic quotes
</span><a href="#852" id="852" class="l"> 852: </a>            <span class="php-var">$destination</span> = <span class="php-keyword2">substr</span>(<span class="php-var">$destination</span>, <span class="php-num">0</span>, <span class="php-var">$a</span>);
<a href="#853" id="853" class="l"> 853: </a>        }
<a href="#854" id="854" class="l"> 854: </a>
<a href="#855" id="855" class="l"> 855: </a>        <span class="php-comment">// 3) URL scheme
</span><a href="#856" id="856" class="l"> 856: </a>        <span class="php-var">$a</span> = <span class="php-keyword2">strpos</span>(<span class="php-var">$destination</span>, <span class="php-quote">'//'</span>);
<a href="#857" id="857" class="l"> 857: </a>        <span class="php-keyword1">if</span> (<span class="php-var">$a</span> === <span class="php-keyword1">FALSE</span>) {
<a href="#858" id="858" class="l"> 858: </a>            <span class="php-var">$scheme</span> = <span class="php-keyword1">FALSE</span>;
<a href="#859" id="859" class="l"> 859: </a>        } <span class="php-keyword1">else</span> {
<a href="#860" id="860" class="l"> 860: </a>            <span class="php-var">$scheme</span> = <span class="php-keyword2">substr</span>(<span class="php-var">$destination</span>, <span class="php-num">0</span>, <span class="php-var">$a</span>);
<a href="#861" id="861" class="l"> 861: </a>            <span class="php-var">$destination</span> = <span class="php-keyword2">substr</span>(<span class="php-var">$destination</span>, <span class="php-var">$a</span> + <span class="php-num">2</span>);
<a href="#862" id="862" class="l"> 862: </a>        }
<a href="#863" id="863" class="l"> 863: </a>
<a href="#864" id="864" class="l"> 864: </a>        <span class="php-comment">// 4) signal or empty
</span><a href="#865" id="865" class="l"> 865: </a>        <span class="php-keyword1">if</span> (!(<span class="php-var">$component</span> <span class="php-keyword1">instanceof</span> Presenter) || <span class="php-keyword2">substr</span>(<span class="php-var">$destination</span>, -<span class="php-num">1</span>) === <span class="php-quote">'!'</span>) {
<a href="#866" id="866" class="l"> 866: </a>            <span class="php-var">$signal</span> = <span class="php-keyword2">rtrim</span>(<span class="php-var">$destination</span>, <span class="php-quote">'!'</span>);
<a href="#867" id="867" class="l"> 867: </a>            <span class="php-var">$a</span> = <span class="php-keyword2">strrpos</span>(<span class="php-var">$signal</span>, <span class="php-quote">':'</span>);
<a href="#868" id="868" class="l"> 868: </a>            <span class="php-keyword1">if</span> (<span class="php-var">$a</span> !== <span class="php-keyword1">FALSE</span>) {
<a href="#869" id="869" class="l"> 869: </a>                <span class="php-var">$component</span> = <span class="php-var">$component</span>-&gt;getComponent(<span class="php-keyword2">strtr</span>(<span class="php-keyword2">substr</span>(<span class="php-var">$signal</span>, <span class="php-num">0</span>, <span class="php-var">$a</span>), <span class="php-quote">':'</span>, <span class="php-quote">'-'</span>));
<a href="#870" id="870" class="l"> 870: </a>                <span class="php-var">$signal</span> = (string) <span class="php-keyword2">substr</span>(<span class="php-var">$signal</span>, <span class="php-var">$a</span> + <span class="php-num">1</span>);
<a href="#871" id="871" class="l"> 871: </a>            }
<a href="#872" id="872" class="l"> 872: </a>            <span class="php-keyword1">if</span> (<span class="php-var">$signal</span> == <span class="php-keyword1">NULL</span>) {  <span class="php-comment">// intentionally ==
</span><a href="#873" id="873" class="l"> 873: </a>                <span class="php-keyword1">throw</span> <span class="php-keyword1">new</span> InvalidLinkException(<span class="php-quote">&quot;Signal must be non-empty string.&quot;</span>);
<a href="#874" id="874" class="l"> 874: </a>            }
<a href="#875" id="875" class="l"> 875: </a>            <span class="php-var">$destination</span> = <span class="php-quote">'this'</span>;
<a href="#876" id="876" class="l"> 876: </a>        }
<a href="#877" id="877" class="l"> 877: </a>
<a href="#878" id="878" class="l"> 878: </a>        <span class="php-keyword1">if</span> (<span class="php-var">$destination</span> == <span class="php-keyword1">NULL</span>) {  <span class="php-comment">// intentionally ==
</span><a href="#879" id="879" class="l"> 879: </a>            <span class="php-keyword1">throw</span> <span class="php-keyword1">new</span> InvalidLinkException(<span class="php-quote">&quot;Destination must be non-empty string.&quot;</span>);
<a href="#880" id="880" class="l"> 880: </a>        }
<a href="#881" id="881" class="l"> 881: </a>
<a href="#882" id="882" class="l"> 882: </a>        <span class="php-comment">// 5) presenter: action
</span><a href="#883" id="883" class="l"> 883: </a>        <span class="php-var">$current</span> = <span class="php-keyword1">FALSE</span>;
<a href="#884" id="884" class="l"> 884: </a>        <span class="php-var">$a</span> = <span class="php-keyword2">strrpos</span>(<span class="php-var">$destination</span>, <span class="php-quote">':'</span>);
<a href="#885" id="885" class="l"> 885: </a>        <span class="php-keyword1">if</span> (<span class="php-var">$a</span> === <span class="php-keyword1">FALSE</span>) {
<a href="#886" id="886" class="l"> 886: </a>            <span class="php-var">$action</span> = <span class="php-var">$destination</span> === <span class="php-quote">'this'</span> ? <span class="php-var">$this</span>-&gt;action : <span class="php-var">$destination</span>;
<a href="#887" id="887" class="l"> 887: </a>            <span class="php-var">$presenter</span> = <span class="php-var">$this</span>-&gt;getName();
<a href="#888" id="888" class="l"> 888: </a>            <span class="php-var">$presenterClass</span> = <span class="php-keyword2">get_class</span>(<span class="php-var">$this</span>);
<a href="#889" id="889" class="l"> 889: </a>
<a href="#890" id="890" class="l"> 890: </a>        } <span class="php-keyword1">else</span> {
<a href="#891" id="891" class="l"> 891: </a>            <span class="php-var">$action</span> = (string) <span class="php-keyword2">substr</span>(<span class="php-var">$destination</span>, <span class="php-var">$a</span> + <span class="php-num">1</span>);
<a href="#892" id="892" class="l"> 892: </a>            <span class="php-keyword1">if</span> (<span class="php-var">$destination</span>[<span class="php-num">0</span>] === <span class="php-quote">':'</span>) { <span class="php-comment">// absolute
</span><a href="#893" id="893" class="l"> 893: </a>                <span class="php-keyword1">if</span> (<span class="php-var">$a</span> &lt; <span class="php-num">2</span>) {
<a href="#894" id="894" class="l"> 894: </a>                    <span class="php-keyword1">throw</span> <span class="php-keyword1">new</span> InvalidLinkException(<span class="php-quote">&quot;Missing presenter name in '</span><span class="php-var">$destination</span><span class="php-quote">'.&quot;</span>);
<a href="#895" id="895" class="l"> 895: </a>                }
<a href="#896" id="896" class="l"> 896: </a>                <span class="php-var">$presenter</span> = <span class="php-keyword2">substr</span>(<span class="php-var">$destination</span>, <span class="php-num">1</span>, <span class="php-var">$a</span> - <span class="php-num">1</span>);
<a href="#897" id="897" class="l"> 897: </a>
<a href="#898" id="898" class="l"> 898: </a>            } <span class="php-keyword1">else</span> { <span class="php-comment">// relative
</span><a href="#899" id="899" class="l"> 899: </a>                <span class="php-var">$presenter</span> = <span class="php-var">$this</span>-&gt;getName();
<a href="#900" id="900" class="l"> 900: </a>                <span class="php-var">$b</span> = <span class="php-keyword2">strrpos</span>(<span class="php-var">$presenter</span>, <span class="php-quote">':'</span>);
<a href="#901" id="901" class="l"> 901: </a>                <span class="php-keyword1">if</span> (<span class="php-var">$b</span> === <span class="php-keyword1">FALSE</span>) { <span class="php-comment">// no module
</span><a href="#902" id="902" class="l"> 902: </a>                    <span class="php-var">$presenter</span> = <span class="php-keyword2">substr</span>(<span class="php-var">$destination</span>, <span class="php-num">0</span>, <span class="php-var">$a</span>);
<a href="#903" id="903" class="l"> 903: </a>                } <span class="php-keyword1">else</span> { <span class="php-comment">// with module
</span><a href="#904" id="904" class="l"> 904: </a>                    <span class="php-var">$presenter</span> = <span class="php-keyword2">substr</span>(<span class="php-var">$presenter</span>, <span class="php-num">0</span>, <span class="php-var">$b</span> + <span class="php-num">1</span>) . <span class="php-keyword2">substr</span>(<span class="php-var">$destination</span>, <span class="php-num">0</span>, <span class="php-var">$a</span>);
<a href="#905" id="905" class="l"> 905: </a>                }
<a href="#906" id="906" class="l"> 906: </a>            }
<a href="#907" id="907" class="l"> 907: </a>            <span class="php-var">$presenterClass</span> = <span class="php-var">$presenterLoader</span>-&gt;getPresenterClass(<span class="php-var">$presenter</span>);
<a href="#908" id="908" class="l"> 908: </a>        }
<a href="#909" id="909" class="l"> 909: </a>
<a href="#910" id="910" class="l"> 910: </a>        <span class="php-comment">// PROCESS SIGNAL ARGUMENTS
</span><a href="#911" id="911" class="l"> 911: </a>        <span class="php-keyword1">if</span> (<span class="php-keyword1">isset</span>(<span class="php-var">$signal</span>)) { <span class="php-comment">// $component must be IStatePersistent
</span><a href="#912" id="912" class="l"> 912: </a>            <span class="php-var">$reflection</span> = <span class="php-keyword1">new</span> PresenterComponentReflection(<span class="php-keyword2">get_class</span>(<span class="php-var">$component</span>));
<a href="#913" id="913" class="l"> 913: </a>            <span class="php-keyword1">if</span> (<span class="php-var">$signal</span> === <span class="php-quote">'this'</span>) { <span class="php-comment">// means &quot;no signal&quot;
</span><a href="#914" id="914" class="l"> 914: </a>                <span class="php-var">$signal</span> = <span class="php-quote">''</span>;
<a href="#915" id="915" class="l"> 915: </a>                <span class="php-keyword1">if</span> (<span class="php-keyword2">array_key_exists</span>(<span class="php-num">0</span>, <span class="php-var">$args</span>)) {
<a href="#916" id="916" class="l"> 916: </a>                    <span class="php-keyword1">throw</span> <span class="php-keyword1">new</span> InvalidLinkException(<span class="php-quote">&quot;Extra parameter for signal '</span><span class="php-var">{$reflection-&gt;name}</span><span class="php-quote">:</span><span class="php-var">$signal</span><span class="php-quote">!'.&quot;</span>);
<a href="#917" id="917" class="l"> 917: </a>                }
<a href="#918" id="918" class="l"> 918: </a>
<a href="#919" id="919" class="l"> 919: </a>            } <span class="php-keyword1">elseif</span> (<span class="php-keyword2">strpos</span>(<span class="php-var">$signal</span>, self::NAME_SEPARATOR) === <span class="php-keyword1">FALSE</span>) { <span class="php-comment">// TODO: AppForm exception
</span><a href="#920" id="920" class="l"> 920: </a>                <span class="php-comment">// counterpart of signalReceived() &amp; tryCall()
</span><a href="#921" id="921" class="l"> 921: </a>                <span class="php-var">$method</span> = <span class="php-var">$component</span>-&gt;formatSignalMethod(<span class="php-var">$signal</span>);
<a href="#922" id="922" class="l"> 922: </a>                <span class="php-keyword1">if</span> (!<span class="php-var">$reflection</span>-&gt;hasCallableMethod(<span class="php-var">$method</span>)) {
<a href="#923" id="923" class="l"> 923: </a>                    <span class="php-keyword1">throw</span> <span class="php-keyword1">new</span> InvalidLinkException(<span class="php-quote">&quot;Unknown signal '</span><span class="php-var">{$reflection-&gt;name}</span><span class="php-quote">:</span><span class="php-var">$signal</span><span class="php-quote">!'.&quot;</span>);
<a href="#924" id="924" class="l"> 924: </a>                }
<a href="#925" id="925" class="l"> 925: </a>                <span class="php-keyword1">if</span> (<span class="php-var">$args</span>) { <span class="php-comment">// convert indexed parameters to named
</span><a href="#926" id="926" class="l"> 926: </a>                    self::argsToParams(<span class="php-keyword2">get_class</span>(<span class="php-var">$component</span>), <span class="php-var">$method</span>, <span class="php-var">$args</span>);
<a href="#927" id="927" class="l"> 927: </a>                }
<a href="#928" id="928" class="l"> 928: </a>            }
<a href="#929" id="929" class="l"> 929: </a>
<a href="#930" id="930" class="l"> 930: </a>            <span class="php-comment">// counterpart of IStatePersistent
</span><a href="#931" id="931" class="l"> 931: </a>            <span class="php-keyword1">if</span> (<span class="php-var">$args</span> &amp;&amp; <span class="php-keyword2">array_intersect_key</span>(<span class="php-var">$args</span>, <span class="php-var">$reflection</span>-&gt;getPersistentParams())) {
<a href="#932" id="932" class="l"> 932: </a>                <span class="php-var">$component</span>-&gt;saveState(<span class="php-var">$args</span>);
<a href="#933" id="933" class="l"> 933: </a>            }
<a href="#934" id="934" class="l"> 934: </a>
<a href="#935" id="935" class="l"> 935: </a>            <span class="php-keyword1">if</span> (<span class="php-var">$args</span> &amp;&amp; <span class="php-var">$component</span> !== <span class="php-var">$this</span>) {
<a href="#936" id="936" class="l"> 936: </a>                <span class="php-var">$prefix</span> = <span class="php-var">$component</span>-&gt;getUniqueId() . self::NAME_SEPARATOR;
<a href="#937" id="937" class="l"> 937: </a>                <span class="php-keyword1">foreach</span> (<span class="php-var">$args</span> as <span class="php-var">$key</span> =&gt; <span class="php-var">$val</span>) {
<a href="#938" id="938" class="l"> 938: </a>                    <span class="php-keyword1">unset</span>(<span class="php-var">$args</span>[<span class="php-var">$key</span>]);
<a href="#939" id="939" class="l"> 939: </a>                    <span class="php-var">$args</span>[<span class="php-var">$prefix</span> . <span class="php-var">$key</span>] = <span class="php-var">$val</span>;
<a href="#940" id="940" class="l"> 940: </a>                }
<a href="#941" id="941" class="l"> 941: </a>            }
<a href="#942" id="942" class="l"> 942: </a>        }
<a href="#943" id="943" class="l"> 943: </a>
<a href="#944" id="944" class="l"> 944: </a>        <span class="php-comment">// PROCESS ARGUMENTS
</span><a href="#945" id="945" class="l"> 945: </a>        <span class="php-keyword1">if</span> (<span class="php-keyword2">is_subclass_of</span>(<span class="php-var">$presenterClass</span>, __CLASS__)) {
<a href="#946" id="946" class="l"> 946: </a>            <span class="php-keyword1">if</span> (<span class="php-var">$action</span> === <span class="php-quote">''</span>) {
<a href="#947" id="947" class="l"> 947: </a>                <span class="php-var">$action</span> = <span class="php-var">$presenterClass</span>::<span class="php-var">$defaultAction</span>;
<a href="#948" id="948" class="l"> 948: </a>            }
<a href="#949" id="949" class="l"> 949: </a>
<a href="#950" id="950" class="l"> 950: </a>            <span class="php-var">$current</span> = (<span class="php-var">$action</span> === <span class="php-quote">'*'</span> || <span class="php-var">$action</span> === <span class="php-var">$this</span>-&gt;action) &amp;&amp; <span class="php-var">$presenterClass</span> === <span class="php-keyword2">get_class</span>(<span class="php-var">$this</span>); <span class="php-comment">// TODO
</span><a href="#951" id="951" class="l"> 951: </a>
<a href="#952" id="952" class="l"> 952: </a>            <span class="php-var">$reflection</span> = <span class="php-keyword1">new</span> PresenterComponentReflection(<span class="php-var">$presenterClass</span>);
<a href="#953" id="953" class="l"> 953: </a>            <span class="php-keyword1">if</span> (<span class="php-var">$args</span> || <span class="php-var">$destination</span> === <span class="php-quote">'this'</span>) {
<a href="#954" id="954" class="l"> 954: </a>                <span class="php-comment">// counterpart of run() &amp; tryCall()
</span><a href="#955" id="955" class="l"> 955: </a>                <span class="php-var">$method</span> = <span class="php-var">$presenterClass</span>::formatActionMethod(<span class="php-var">$action</span>);
<a href="#956" id="956" class="l"> 956: </a>                <span class="php-keyword1">if</span> (!<span class="php-var">$reflection</span>-&gt;hasCallableMethod(<span class="php-var">$method</span>)) {
<a href="#957" id="957" class="l"> 957: </a>                    <span class="php-var">$method</span> = <span class="php-var">$presenterClass</span>::formatRenderMethod(<span class="php-var">$action</span>);
<a href="#958" id="958" class="l"> 958: </a>                    <span class="php-keyword1">if</span> (!<span class="php-var">$reflection</span>-&gt;hasCallableMethod(<span class="php-var">$method</span>)) {
<a href="#959" id="959" class="l"> 959: </a>                        <span class="php-var">$method</span> = <span class="php-keyword1">NULL</span>;
<a href="#960" id="960" class="l"> 960: </a>                    }
<a href="#961" id="961" class="l"> 961: </a>                }
<a href="#962" id="962" class="l"> 962: </a>
<a href="#963" id="963" class="l"> 963: </a>                <span class="php-comment">// convert indexed parameters to named
</span><a href="#964" id="964" class="l"> 964: </a>                <span class="php-keyword1">if</span> (<span class="php-var">$method</span> === <span class="php-keyword1">NULL</span>) {
<a href="#965" id="965" class="l"> 965: </a>                    <span class="php-keyword1">if</span> (<span class="php-keyword2">array_key_exists</span>(<span class="php-num">0</span>, <span class="php-var">$args</span>)) {
<a href="#966" id="966" class="l"> 966: </a>                        <span class="php-keyword1">throw</span> <span class="php-keyword1">new</span> InvalidLinkException(<span class="php-quote">&quot;Extra parameter for '</span><span class="php-var">$presenter</span><span class="php-quote">:</span><span class="php-var">$action</span><span class="php-quote">'.&quot;</span>);
<a href="#967" id="967" class="l"> 967: </a>                    }
<a href="#968" id="968" class="l"> 968: </a>
<a href="#969" id="969" class="l"> 969: </a>                } <span class="php-keyword1">elseif</span> (<span class="php-var">$destination</span> === <span class="php-quote">'this'</span>) {
<a href="#970" id="970" class="l"> 970: </a>                    self::argsToParams(<span class="php-var">$presenterClass</span>, <span class="php-var">$method</span>, <span class="php-var">$args</span>, <span class="php-var">$this</span>-&gt;params);
<a href="#971" id="971" class="l"> 971: </a>
<a href="#972" id="972" class="l"> 972: </a>                } <span class="php-keyword1">else</span> {
<a href="#973" id="973" class="l"> 973: </a>                    self::argsToParams(<span class="php-var">$presenterClass</span>, <span class="php-var">$method</span>, <span class="php-var">$args</span>);
<a href="#974" id="974" class="l"> 974: </a>                }
<a href="#975" id="975" class="l"> 975: </a>            }
<a href="#976" id="976" class="l"> 976: </a>
<a href="#977" id="977" class="l"> 977: </a>            <span class="php-comment">// counterpart of IStatePersistent
</span><a href="#978" id="978" class="l"> 978: </a>            <span class="php-keyword1">if</span> (<span class="php-var">$args</span> &amp;&amp; <span class="php-keyword2">array_intersect_key</span>(<span class="php-var">$args</span>, <span class="php-var">$reflection</span>-&gt;getPersistentParams())) {
<a href="#979" id="979" class="l"> 979: </a>                <span class="php-var">$this</span>-&gt;saveState(<span class="php-var">$args</span>, <span class="php-var">$reflection</span>);
<a href="#980" id="980" class="l"> 980: </a>            }
<a href="#981" id="981" class="l"> 981: </a>
<a href="#982" id="982" class="l"> 982: </a>            <span class="php-var">$globalState</span> = <span class="php-var">$this</span>-&gt;getGlobalState(<span class="php-var">$destination</span> === <span class="php-quote">'this'</span> ? <span class="php-keyword1">NULL</span> : <span class="php-var">$presenterClass</span>);
<a href="#983" id="983" class="l"> 983: </a>            <span class="php-keyword1">if</span> (<span class="php-var">$current</span> &amp;&amp; <span class="php-var">$args</span>) {
<a href="#984" id="984" class="l"> 984: </a>                <span class="php-var">$tmp</span> = <span class="php-var">$globalState</span> + <span class="php-var">$this</span>-&gt;params;
<a href="#985" id="985" class="l"> 985: </a>                <span class="php-keyword1">foreach</span> (<span class="php-var">$args</span> as <span class="php-var">$key</span> =&gt; <span class="php-var">$val</span>) {
<a href="#986" id="986" class="l"> 986: </a>                    <span class="php-keyword1">if</span> ((string) <span class="php-var">$val</span> !== (<span class="php-keyword1">isset</span>(<span class="php-var">$tmp</span>[<span class="php-var">$key</span>]) ? (string) <span class="php-var">$tmp</span>[<span class="php-var">$key</span>] : <span class="php-quote">''</span>)) {
<a href="#987" id="987" class="l"> 987: </a>                        <span class="php-var">$current</span> = <span class="php-keyword1">FALSE</span>;
<a href="#988" id="988" class="l"> 988: </a>                        <span class="php-keyword1">break</span>;
<a href="#989" id="989" class="l"> 989: </a>                    }
<a href="#990" id="990" class="l"> 990: </a>                }
<a href="#991" id="991" class="l"> 991: </a>            }
<a href="#992" id="992" class="l"> 992: </a>            <span class="php-var">$args</span> += <span class="php-var">$globalState</span>;
<a href="#993" id="993" class="l"> 993: </a>        }
<a href="#994" id="994" class="l"> 994: </a>
<a href="#995" id="995" class="l"> 995: </a>        <span class="php-comment">// ADD ACTION &amp; SIGNAL &amp; FLASH
</span><a href="#996" id="996" class="l"> 996: </a>        <span class="php-var">$args</span>[self::ACTION_KEY] = <span class="php-var">$action</span>;
<a href="#997" id="997" class="l"> 997: </a>        <span class="php-keyword1">if</span> (!<span class="php-keyword1">empty</span>(<span class="php-var">$signal</span>)) {
<a href="#998" id="998" class="l"> 998: </a>            <span class="php-var">$args</span>[self::SIGNAL_KEY] = <span class="php-var">$component</span>-&gt;getParamId(<span class="php-var">$signal</span>);
<a href="#999" id="999" class="l"> 999: </a>            <span class="php-var">$current</span> = <span class="php-var">$current</span> &amp;&amp; <span class="php-var">$args</span>[self::SIGNAL_KEY] === <span class="php-var">$this</span>-&gt;getParam(self::SIGNAL_KEY);
<a href="#1000" id="1000" class="l">1000: </a>        }
<a href="#1001" id="1001" class="l">1001: </a>        <span class="php-keyword1">if</span> ((<span class="php-var">$mode</span> === <span class="php-quote">'redirect'</span> || <span class="php-var">$mode</span> === <span class="php-quote">'forward'</span>) &amp;&amp; <span class="php-var">$this</span>-&gt;hasFlashSession()) {
<a href="#1002" id="1002" class="l">1002: </a>            <span class="php-var">$args</span>[self::FLASH_KEY] = <span class="php-var">$this</span>-&gt;getParam(self::FLASH_KEY);
<a href="#1003" id="1003" class="l">1003: </a>        }
<a href="#1004" id="1004" class="l">1004: </a>
<a href="#1005" id="1005" class="l">1005: </a>        <span class="php-var">$this</span>-&gt;lastCreatedRequest = <span class="php-keyword1">new</span> PresenterRequest(
<a href="#1006" id="1006" class="l">1006: </a>            <span class="php-var">$presenter</span>,
<a href="#1007" id="1007" class="l">1007: </a>            PresenterRequest::FORWARD,
<a href="#1008" id="1008" class="l">1008: </a>            <span class="php-var">$args</span>,
<a href="#1009" id="1009" class="l">1009: </a>            <span class="php-keyword1">array</span>(),
<a href="#1010" id="1010" class="l">1010: </a>            <span class="php-keyword1">array</span>()
<a href="#1011" id="1011" class="l">1011: </a>        );
<a href="#1012" id="1012" class="l">1012: </a>        <span class="php-var">$this</span>-&gt;lastCreatedRequestFlag = <span class="php-keyword1">array</span>(<span class="php-quote">'current'</span> =&gt; <span class="php-var">$current</span>);
<a href="#1013" id="1013" class="l">1013: </a>
<a href="#1014" id="1014" class="l">1014: </a>        <span class="php-keyword1">if</span> (<span class="php-var">$mode</span> === <span class="php-quote">'forward'</span>) <span class="php-keyword1">return</span>;
<a href="#1015" id="1015" class="l">1015: </a>
<a href="#1016" id="1016" class="l">1016: </a>        <span class="php-comment">// CONSTRUCT URL
</span><a href="#1017" id="1017" class="l">1017: </a>        <span class="php-var">$uri</span> = <span class="php-var">$router</span>-&gt;constructUrl(<span class="php-var">$this</span>-&gt;lastCreatedRequest, <span class="php-var">$httpRequest</span>);
<a href="#1018" id="1018" class="l">1018: </a>        <span class="php-keyword1">if</span> (<span class="php-var">$uri</span> === <span class="php-keyword1">NULL</span>) {
<a href="#1019" id="1019" class="l">1019: </a>            <span class="php-keyword1">unset</span>(<span class="php-var">$args</span>[self::ACTION_KEY]);
<a href="#1020" id="1020" class="l">1020: </a>            <span class="php-var">$params</span> = <span class="php-keyword2">urldecode</span>(<span class="php-keyword2">http_build_query</span>(<span class="php-var">$args</span>, <span class="php-keyword1">NULL</span>, <span class="php-quote">', '</span>));
<a href="#1021" id="1021" class="l">1021: </a>            <span class="php-keyword1">throw</span> <span class="php-keyword1">new</span> InvalidLinkException(<span class="php-quote">&quot;No route for </span><span class="php-var">$presenter</span><span class="php-quote">:</span><span class="php-var">$action</span><span class="php-quote">(</span><span class="php-var">$params</span><span class="php-quote">)&quot;</span>);
<a href="#1022" id="1022" class="l">1022: </a>        }
<a href="#1023" id="1023" class="l">1023: </a>
<a href="#1024" id="1024" class="l">1024: </a>        <span class="php-comment">// make URL relative if possible
</span><a href="#1025" id="1025" class="l">1025: </a>        <span class="php-keyword1">if</span> (<span class="php-var">$mode</span> === <span class="php-quote">'link'</span> &amp;&amp; <span class="php-var">$scheme</span> === <span class="php-keyword1">FALSE</span> &amp;&amp; !<span class="php-var">$this</span>-&gt;absoluteUrls) {
<a href="#1026" id="1026" class="l">1026: </a>            <span class="php-var">$hostUri</span> = <span class="php-var">$httpRequest</span>-&gt;getUri()-&gt;getHostUri();
<a href="#1027" id="1027" class="l">1027: </a>            <span class="php-keyword1">if</span> (<span class="php-keyword2">strncmp</span>(<span class="php-var">$uri</span>, <span class="php-var">$hostUri</span>, <span class="php-keyword2">strlen</span>(<span class="php-var">$hostUri</span>)) === <span class="php-num">0</span>) {
<a href="#1028" id="1028" class="l">1028: </a>                <span class="php-var">$uri</span> = <span class="php-keyword2">substr</span>(<span class="php-var">$uri</span>, <span class="php-keyword2">strlen</span>(<span class="php-var">$hostUri</span>));
<a href="#1029" id="1029" class="l">1029: </a>            }
<a href="#1030" id="1030" class="l">1030: </a>        }
<a href="#1031" id="1031" class="l">1031: </a>
<a href="#1032" id="1032" class="l">1032: </a>        <span class="php-keyword1">return</span> <span class="php-var">$uri</span> . <span class="php-var">$fragment</span>;
<a href="#1033" id="1033" class="l">1033: </a>    }
<a href="#1034" id="1034" class="l">1034: </a>
<a href="#1035" id="1035" class="l">1035: </a>
<a href="#1036" id="1036" class="l">1036: </a>
<a href="#1037" id="1037" class="l">1037: </a>    <span class="php-comment">/**
</span><a href="#1038" id="1038" class="l">1038: </a><span class="php-comment">     * Converts list of arguments to named parameters.
</span><a href="#1039" id="1039" class="l">1039: </a><span class="php-comment">     * @param  string  class name
</span><a href="#1040" id="1040" class="l">1040: </a><span class="php-comment">     * @param  string  method name
</span><a href="#1041" id="1041" class="l">1041: </a><span class="php-comment">     * @param  array   arguments
</span><a href="#1042" id="1042" class="l">1042: </a><span class="php-comment">     * @param  array   supplemental arguments
</span><a href="#1043" id="1043" class="l">1043: </a><span class="php-comment">     * @return void
</span><a href="#1044" id="1044" class="l">1044: </a><span class="php-comment">     * @throws InvalidLinkException
</span><a href="#1045" id="1045" class="l">1045: </a><span class="php-comment">     */</span>
<a href="#1046" id="1046" class="l">1046: </a>    <span class="php-keyword1">private</span> <span class="php-keyword1">static</span> <span class="php-keyword1">function</span> argsToParams(<span class="php-var">$class</span>, <span class="php-var">$method</span>, &amp; <span class="php-var">$args</span>, <span class="php-var">$supplemental</span> = <span class="php-keyword1">array</span>())
<a href="#1047" id="1047" class="l">1047: </a>    {
<a href="#1048" id="1048" class="l">1048: </a>        <span class="php-keyword1">static</span> <span class="php-var">$cache</span>;
<a href="#1049" id="1049" class="l">1049: </a>        <span class="php-var">$params</span> = &amp; <span class="php-var">$cache</span>[<span class="php-keyword2">strtolower</span>(<span class="php-var">$class</span> . <span class="php-quote">':'</span> . <span class="php-var">$method</span>)];
<a href="#1050" id="1050" class="l">1050: </a>        <span class="php-keyword1">if</span> (<span class="php-var">$params</span> === <span class="php-keyword1">NULL</span>) {
<a href="#1051" id="1051" class="l">1051: </a>            <span class="php-var">$params</span> = Nette\Reflection\MethodReflection::from(<span class="php-var">$class</span>, <span class="php-var">$method</span>)-&gt;getDefaultParameters();
<a href="#1052" id="1052" class="l">1052: </a>        }
<a href="#1053" id="1053" class="l">1053: </a>        <span class="php-var">$i</span> = <span class="php-num">0</span>;
<a href="#1054" id="1054" class="l">1054: </a>        <span class="php-keyword1">foreach</span> (<span class="php-var">$params</span> as <span class="php-var">$name</span> =&gt; <span class="php-var">$def</span>) {
<a href="#1055" id="1055" class="l">1055: </a>            <span class="php-keyword1">if</span> (<span class="php-keyword2">array_key_exists</span>(<span class="php-var">$i</span>, <span class="php-var">$args</span>)) {
<a href="#1056" id="1056" class="l">1056: </a>                <span class="php-var">$args</span>[<span class="php-var">$name</span>] = <span class="php-var">$args</span>[<span class="php-var">$i</span>];
<a href="#1057" id="1057" class="l">1057: </a>                <span class="php-keyword1">unset</span>(<span class="php-var">$args</span>[<span class="php-var">$i</span>]);
<a href="#1058" id="1058" class="l">1058: </a>                <span class="php-var">$i</span>++;
<a href="#1059" id="1059" class="l">1059: </a>
<a href="#1060" id="1060" class="l">1060: </a>            } <span class="php-keyword1">elseif</span> (<span class="php-keyword2">array_key_exists</span>(<span class="php-var">$name</span>, <span class="php-var">$args</span>)) {
<a href="#1061" id="1061" class="l">1061: </a>                <span class="php-comment">// continue with process
</span><a href="#1062" id="1062" class="l">1062: </a>
<a href="#1063" id="1063" class="l">1063: </a>            } <span class="php-keyword1">elseif</span> (<span class="php-keyword2">array_key_exists</span>(<span class="php-var">$name</span>, <span class="php-var">$supplemental</span>)) {
<a href="#1064" id="1064" class="l">1064: </a>                <span class="php-var">$args</span>[<span class="php-var">$name</span>] = <span class="php-var">$supplemental</span>[<span class="php-var">$name</span>];
<a href="#1065" id="1065" class="l">1065: </a>
<a href="#1066" id="1066" class="l">1066: </a>            } <span class="php-keyword1">else</span> {
<a href="#1067" id="1067" class="l">1067: </a>                <span class="php-keyword1">continue</span>;
<a href="#1068" id="1068" class="l">1068: </a>            }
<a href="#1069" id="1069" class="l">1069: </a>
<a href="#1070" id="1070" class="l">1070: </a>            <span class="php-keyword1">if</span> (<span class="php-var">$def</span> === <span class="php-keyword1">NULL</span>) {
<a href="#1071" id="1071" class="l">1071: </a>                <span class="php-keyword1">if</span> ((string) <span class="php-var">$args</span>[<span class="php-var">$name</span>] === <span class="php-quote">''</span>) <span class="php-var">$args</span>[<span class="php-var">$name</span>] = <span class="php-keyword1">NULL</span>; <span class="php-comment">// value transmit is unnecessary
</span><a href="#1072" id="1072" class="l">1072: </a>            } <span class="php-keyword1">else</span> {
<a href="#1073" id="1073" class="l">1073: </a>                <span class="php-keyword2">settype</span>(<span class="php-var">$args</span>[<span class="php-var">$name</span>], <span class="php-keyword2">gettype</span>(<span class="php-var">$def</span>));
<a href="#1074" id="1074" class="l">1074: </a>                <span class="php-keyword1">if</span> (<span class="php-var">$args</span>[<span class="php-var">$name</span>] === <span class="php-var">$def</span>) <span class="php-var">$args</span>[<span class="php-var">$name</span>] = <span class="php-keyword1">NULL</span>;
<a href="#1075" id="1075" class="l">1075: </a>            }
<a href="#1076" id="1076" class="l">1076: </a>        }
<a href="#1077" id="1077" class="l">1077: </a>
<a href="#1078" id="1078" class="l">1078: </a>        <span class="php-keyword1">if</span> (<span class="php-keyword2">array_key_exists</span>(<span class="php-var">$i</span>, <span class="php-var">$args</span>)) {
<a href="#1079" id="1079" class="l">1079: </a>            <span class="php-keyword1">throw</span> <span class="php-keyword1">new</span> InvalidLinkException(<span class="php-quote">&quot;Extra parameter for signal '</span><span class="php-var">$class</span><span class="php-quote">:</span><span class="php-var">$method</span><span class="php-quote">'.&quot;</span>);
<a href="#1080" id="1080" class="l">1080: </a>        }
<a href="#1081" id="1081" class="l">1081: </a>    }
<a href="#1082" id="1082" class="l">1082: </a>
<a href="#1083" id="1083" class="l">1083: </a>
<a href="#1084" id="1084" class="l">1084: </a>
<a href="#1085" id="1085" class="l">1085: </a>    <span class="php-comment">/**
</span><a href="#1086" id="1086" class="l">1086: </a><span class="php-comment">     * Invalid link handler. Descendant can override this method to change default behaviour.
</span><a href="#1087" id="1087" class="l">1087: </a><span class="php-comment">     * @param  InvalidLinkException
</span><a href="#1088" id="1088" class="l">1088: </a><span class="php-comment">     * @return string
</span><a href="#1089" id="1089" class="l">1089: </a><span class="php-comment">     * @throws InvalidLinkException
</span><a href="#1090" id="1090" class="l">1090: </a><span class="php-comment">     */</span>
<a href="#1091" id="1091" class="l">1091: </a>    <span class="php-keyword1">protected</span> <span class="php-keyword1">function</span> handleInvalidLink(<span class="php-var">$e</span>)
<a href="#1092" id="1092" class="l">1092: </a>    {
<a href="#1093" id="1093" class="l">1093: </a>        <span class="php-keyword1">if</span> (self::<span class="php-var">$invalidLinkMode</span> === <span class="php-keyword1">NULL</span>) {
<a href="#1094" id="1094" class="l">1094: </a>            self::<span class="php-var">$invalidLinkMode</span> = Environment::isProduction()
<a href="#1095" id="1095" class="l">1095: </a>                ? self::INVALID_LINK_SILENT : self::INVALID_LINK_WARNING;
<a href="#1096" id="1096" class="l">1096: </a>        }
<a href="#1097" id="1097" class="l">1097: </a>
<a href="#1098" id="1098" class="l">1098: </a>        <span class="php-keyword1">if</span> (self::<span class="php-var">$invalidLinkMode</span> === self::INVALID_LINK_SILENT) {
<a href="#1099" id="1099" class="l">1099: </a>            <span class="php-keyword1">return</span> <span class="php-quote">'#'</span>;
<a href="#1100" id="1100" class="l">1100: </a>
<a href="#1101" id="1101" class="l">1101: </a>        } <span class="php-keyword1">elseif</span> (self::<span class="php-var">$invalidLinkMode</span> === self::INVALID_LINK_WARNING) {
<a href="#1102" id="1102" class="l">1102: </a>            <span class="php-keyword1">return</span> <span class="php-quote">'error: '</span> . <span class="php-var">$e</span>-&gt;getMessage();
<a href="#1103" id="1103" class="l">1103: </a>
<a href="#1104" id="1104" class="l">1104: </a>        } <span class="php-keyword1">else</span> { <span class="php-comment">// self::INVALID_LINK_EXCEPTION
</span><a href="#1105" id="1105" class="l">1105: </a>            <span class="php-keyword1">throw</span> <span class="php-var">$e</span>;
<a href="#1106" id="1106" class="l">1106: </a>        }
<a href="#1107" id="1107" class="l">1107: </a>    }
<a href="#1108" id="1108" class="l">1108: </a>
<a href="#1109" id="1109" class="l">1109: </a>
<a href="#1110" id="1110" class="l">1110: </a>
<a href="#1111" id="1111" class="l">1111: </a>    <span class="php-comment">/********************* interface IStatePersistent ****************d*g**/</span>
<a href="#1112" id="1112" class="l">1112: </a>
<a href="#1113" id="1113" class="l">1113: </a>
<a href="#1114" id="1114" class="l">1114: </a>
<a href="#1115" id="1115" class="l">1115: </a>    <span class="php-comment">/**
</span><a href="#1116" id="1116" class="l">1116: </a><span class="php-comment">     * Returns array of persistent components.
</span><a href="#1117" id="1117" class="l">1117: </a><span class="php-comment">     * This default implementation detects components by class-level annotation @persistent(cmp1, cmp2).
</span><a href="#1118" id="1118" class="l">1118: </a><span class="php-comment">     * @return array
</span><a href="#1119" id="1119" class="l">1119: </a><span class="php-comment">     */</span>
<a href="#1120" id="1120" class="l">1120: </a>    <span class="php-keyword1">public</span> <span class="php-keyword1">static</span> <span class="php-keyword1">function</span> getPersistentComponents()
<a href="#1121" id="1121" class="l">1121: </a>    {
<a href="#1122" id="1122" class="l">1122: </a>        <span class="php-keyword1">return</span> (<span class="php-keyword1">array</span>) Nette\Reflection\ClassReflection::from(<span class="php-keyword2">get_called_class</span>())-&gt;getAnnotation(<span class="php-quote">'persistent'</span>);
<a href="#1123" id="1123" class="l">1123: </a>    }
<a href="#1124" id="1124" class="l">1124: </a>
<a href="#1125" id="1125" class="l">1125: </a>
<a href="#1126" id="1126" class="l">1126: </a>
<a href="#1127" id="1127" class="l">1127: </a>    <span class="php-comment">/**
</span><a href="#1128" id="1128" class="l">1128: </a><span class="php-comment">     * Saves state information for all subcomponents to $this-&gt;globalState.
</span><a href="#1129" id="1129" class="l">1129: </a><span class="php-comment">     * @return array
</span><a href="#1130" id="1130" class="l">1130: </a><span class="php-comment">     */</span>
<a href="#1131" id="1131" class="l">1131: </a>    <span class="php-keyword1">private</span> <span class="php-keyword1">function</span> getGlobalState(<span class="php-var">$forClass</span> = <span class="php-keyword1">NULL</span>)
<a href="#1132" id="1132" class="l">1132: </a>    {
<a href="#1133" id="1133" class="l">1133: </a>        <span class="php-var">$sinces</span> = &amp; <span class="php-var">$this</span>-&gt;globalStateSinces;
<a href="#1134" id="1134" class="l">1134: </a>
<a href="#1135" id="1135" class="l">1135: </a>        <span class="php-keyword1">if</span> (<span class="php-var">$this</span>-&gt;globalState === <span class="php-keyword1">NULL</span>) {
<a href="#1136" id="1136" class="l">1136: </a>            <span class="php-var">$state</span> = <span class="php-keyword1">array</span>();
<a href="#1137" id="1137" class="l">1137: </a>            <span class="php-keyword1">foreach</span> (<span class="php-var">$this</span>-&gt;globalParams as <span class="php-var">$id</span> =&gt; <span class="php-var">$params</span>) {
<a href="#1138" id="1138" class="l">1138: </a>                <span class="php-var">$prefix</span> = <span class="php-var">$id</span> . self::NAME_SEPARATOR;
<a href="#1139" id="1139" class="l">1139: </a>                <span class="php-keyword1">foreach</span> (<span class="php-var">$params</span> as <span class="php-var">$key</span> =&gt; <span class="php-var">$val</span>) {
<a href="#1140" id="1140" class="l">1140: </a>                    <span class="php-var">$state</span>[<span class="php-var">$prefix</span> . <span class="php-var">$key</span>] = <span class="php-var">$val</span>;
<a href="#1141" id="1141" class="l">1141: </a>                }
<a href="#1142" id="1142" class="l">1142: </a>            }
<a href="#1143" id="1143" class="l">1143: </a>            <span class="php-var">$this</span>-&gt;saveState(<span class="php-var">$state</span>, <span class="php-var">$forClass</span> ? <span class="php-keyword1">new</span> PresenterComponentReflection(<span class="php-var">$forClass</span>) : <span class="php-keyword1">NULL</span>);
<a href="#1144" id="1144" class="l">1144: </a>
<a href="#1145" id="1145" class="l">1145: </a>            <span class="php-keyword1">if</span> (<span class="php-var">$sinces</span> === <span class="php-keyword1">NULL</span>) {
<a href="#1146" id="1146" class="l">1146: </a>                <span class="php-var">$sinces</span> = <span class="php-keyword1">array</span>();
<a href="#1147" id="1147" class="l">1147: </a>                <span class="php-keyword1">foreach</span> (<span class="php-var">$this</span>-&gt;getReflection()-&gt;getPersistentParams() as <span class="php-var">$nm</span> =&gt; <span class="php-var">$meta</span>) {
<a href="#1148" id="1148" class="l">1148: </a>                    <span class="php-var">$sinces</span>[<span class="php-var">$nm</span>] = <span class="php-var">$meta</span>[<span class="php-quote">'since'</span>];
<a href="#1149" id="1149" class="l">1149: </a>                }
<a href="#1150" id="1150" class="l">1150: </a>            }
<a href="#1151" id="1151" class="l">1151: </a>
<a href="#1152" id="1152" class="l">1152: </a>            <span class="php-var">$components</span> = <span class="php-var">$this</span>-&gt;getReflection()-&gt;getPersistentComponents();
<a href="#1153" id="1153" class="l">1153: </a>            <span class="php-var">$iterator</span> = <span class="php-var">$this</span>-&gt;getComponents(<span class="php-keyword1">TRUE</span>, <span class="php-quote">'Nette\Application\IStatePersistent'</span>);
<a href="#1154" id="1154" class="l">1154: </a>            <span class="php-keyword1">foreach</span> (<span class="php-var">$iterator</span> as <span class="php-var">$name</span> =&gt; <span class="php-var">$component</span>)
<a href="#1155" id="1155" class="l">1155: </a>            {
<a href="#1156" id="1156" class="l">1156: </a>                <span class="php-keyword1">if</span> (<span class="php-var">$iterator</span>-&gt;getDepth() === <span class="php-num">0</span>) {
<a href="#1157" id="1157" class="l">1157: </a>                    <span class="php-comment">// counts with RecursiveIteratorIterator::SELF_FIRST
</span><a href="#1158" id="1158" class="l">1158: </a>                    <span class="php-var">$since</span> = <span class="php-keyword1">isset</span>(<span class="php-var">$components</span>[<span class="php-var">$name</span>][<span class="php-quote">'since'</span>]) ? <span class="php-var">$components</span>[<span class="php-var">$name</span>][<span class="php-quote">'since'</span>] : <span class="php-keyword1">FALSE</span>; <span class="php-comment">// FALSE = nonpersistent
</span><a href="#1159" id="1159" class="l">1159: </a>                }
<a href="#1160" id="1160" class="l">1160: </a>                <span class="php-var">$prefix</span> = <span class="php-var">$component</span>-&gt;getUniqueId() . self::NAME_SEPARATOR;
<a href="#1161" id="1161" class="l">1161: </a>                <span class="php-var">$params</span> = <span class="php-keyword1">array</span>();
<a href="#1162" id="1162" class="l">1162: </a>                <span class="php-var">$component</span>-&gt;saveState(<span class="php-var">$params</span>);
<a href="#1163" id="1163" class="l">1163: </a>                <span class="php-keyword1">foreach</span> (<span class="php-var">$params</span> as <span class="php-var">$key</span> =&gt; <span class="php-var">$val</span>) {
<a href="#1164" id="1164" class="l">1164: </a>                    <span class="php-var">$state</span>[<span class="php-var">$prefix</span> . <span class="php-var">$key</span>] = <span class="php-var">$val</span>;
<a href="#1165" id="1165" class="l">1165: </a>                    <span class="php-var">$sinces</span>[<span class="php-var">$prefix</span> . <span class="php-var">$key</span>] = <span class="php-var">$since</span>;
<a href="#1166" id="1166" class="l">1166: </a>                }
<a href="#1167" id="1167" class="l">1167: </a>            }
<a href="#1168" id="1168" class="l">1168: </a>
<a href="#1169" id="1169" class="l">1169: </a>        } <span class="php-keyword1">else</span> {
<a href="#1170" id="1170" class="l">1170: </a>            <span class="php-var">$state</span> = <span class="php-var">$this</span>-&gt;globalState;
<a href="#1171" id="1171" class="l">1171: </a>        }
<a href="#1172" id="1172" class="l">1172: </a>
<a href="#1173" id="1173" class="l">1173: </a>        <span class="php-keyword1">if</span> (<span class="php-var">$forClass</span> !== <span class="php-keyword1">NULL</span>) {
<a href="#1174" id="1174" class="l">1174: </a>            <span class="php-var">$since</span> = <span class="php-keyword1">NULL</span>;
<a href="#1175" id="1175" class="l">1175: </a>            <span class="php-keyword1">foreach</span> (<span class="php-var">$state</span> as <span class="php-var">$key</span> =&gt; <span class="php-var">$foo</span>) {
<a href="#1176" id="1176" class="l">1176: </a>                <span class="php-keyword1">if</span> (!<span class="php-keyword1">isset</span>(<span class="php-var">$sinces</span>[<span class="php-var">$key</span>])) {
<a href="#1177" id="1177" class="l">1177: </a>                    <span class="php-var">$x</span> = <span class="php-keyword2">strpos</span>(<span class="php-var">$key</span>, self::NAME_SEPARATOR);
<a href="#1178" id="1178" class="l">1178: </a>                    <span class="php-var">$x</span> = <span class="php-var">$x</span> === <span class="php-keyword1">FALSE</span> ? <span class="php-var">$key</span> : <span class="php-keyword2">substr</span>(<span class="php-var">$key</span>, <span class="php-num">0</span>, <span class="php-var">$x</span>);
<a href="#1179" id="1179" class="l">1179: </a>                    <span class="php-var">$sinces</span>[<span class="php-var">$key</span>] = <span class="php-keyword1">isset</span>(<span class="php-var">$sinces</span>[<span class="php-var">$x</span>]) ? <span class="php-var">$sinces</span>[<span class="php-var">$x</span>] : <span class="php-keyword1">FALSE</span>;
<a href="#1180" id="1180" class="l">1180: </a>                }
<a href="#1181" id="1181" class="l">1181: </a>                <span class="php-keyword1">if</span> (<span class="php-var">$since</span> !== <span class="php-var">$sinces</span>[<span class="php-var">$key</span>]) {
<a href="#1182" id="1182" class="l">1182: </a>                    <span class="php-var">$since</span> = <span class="php-var">$sinces</span>[<span class="php-var">$key</span>];
<a href="#1183" id="1183" class="l">1183: </a>                    <span class="php-var">$ok</span> = <span class="php-var">$since</span> &amp;&amp; (<span class="php-keyword2">is_subclass_of</span>(<span class="php-var">$forClass</span>, <span class="php-var">$since</span>) || <span class="php-var">$forClass</span> === <span class="php-var">$since</span>);
<a href="#1184" id="1184" class="l">1184: </a>                }
<a href="#1185" id="1185" class="l">1185: </a>                <span class="php-keyword1">if</span> (!<span class="php-var">$ok</span>) {
<a href="#1186" id="1186" class="l">1186: </a>                    <span class="php-keyword1">unset</span>(<span class="php-var">$state</span>[<span class="php-var">$key</span>]);
<a href="#1187" id="1187" class="l">1187: </a>                }
<a href="#1188" id="1188" class="l">1188: </a>            }
<a href="#1189" id="1189" class="l">1189: </a>        }
<a href="#1190" id="1190" class="l">1190: </a>
<a href="#1191" id="1191" class="l">1191: </a>        <span class="php-keyword1">return</span> <span class="php-var">$state</span>;
<a href="#1192" id="1192" class="l">1192: </a>    }
<a href="#1193" id="1193" class="l">1193: </a>
<a href="#1194" id="1194" class="l">1194: </a>
<a href="#1195" id="1195" class="l">1195: </a>
<a href="#1196" id="1196" class="l">1196: </a>    <span class="php-comment">/**
</span><a href="#1197" id="1197" class="l">1197: </a><span class="php-comment">     * Permanently saves state information for all subcomponents to $this-&gt;globalState.
</span><a href="#1198" id="1198" class="l">1198: </a><span class="php-comment">     * @return void
</span><a href="#1199" id="1199" class="l">1199: </a><span class="php-comment">     */</span>
<a href="#1200" id="1200" class="l">1200: </a>    <span class="php-keyword1">protected</span> <span class="php-keyword1">function</span> saveGlobalState()
<a href="#1201" id="1201" class="l">1201: </a>    {
<a href="#1202" id="1202" class="l">1202: </a>        <span class="php-comment">// load lazy components
</span><a href="#1203" id="1203" class="l">1203: </a>        <span class="php-keyword1">foreach</span> (<span class="php-var">$this</span>-&gt;globalParams as <span class="php-var">$id</span> =&gt; <span class="php-var">$foo</span>) {
<a href="#1204" id="1204" class="l">1204: </a>            <span class="php-var">$this</span>-&gt;getComponent(<span class="php-var">$id</span>, <span class="php-keyword1">FALSE</span>);
<a href="#1205" id="1205" class="l">1205: </a>        }
<a href="#1206" id="1206" class="l">1206: </a>
<a href="#1207" id="1207" class="l">1207: </a>        <span class="php-var">$this</span>-&gt;globalParams = <span class="php-keyword1">array</span>();
<a href="#1208" id="1208" class="l">1208: </a>        <span class="php-var">$this</span>-&gt;globalState = <span class="php-var">$this</span>-&gt;getGlobalState();
<a href="#1209" id="1209" class="l">1209: </a>    }
<a href="#1210" id="1210" class="l">1210: </a>
<a href="#1211" id="1211" class="l">1211: </a>
<a href="#1212" id="1212" class="l">1212: </a>
<a href="#1213" id="1213" class="l">1213: </a>    <span class="php-comment">/**
</span><a href="#1214" id="1214" class="l">1214: </a><span class="php-comment">     * Initializes $this-&gt;globalParams, $this-&gt;signal &amp; $this-&gt;signalReceiver, $this-&gt;action, $this-&gt;view. Called by run().
</span><a href="#1215" id="1215" class="l">1215: </a><span class="php-comment">     * @return void
</span><a href="#1216" id="1216" class="l">1216: </a><span class="php-comment">     * @throws BadRequestException if action name is not valid
</span><a href="#1217" id="1217" class="l">1217: </a><span class="php-comment">     */</span>
<a href="#1218" id="1218" class="l">1218: </a>    <span class="php-keyword1">private</span> <span class="php-keyword1">function</span> initGlobalParams()
<a href="#1219" id="1219" class="l">1219: </a>    {
<a href="#1220" id="1220" class="l">1220: </a>        <span class="php-comment">// init $this-&gt;globalParams
</span><a href="#1221" id="1221" class="l">1221: </a>        <span class="php-var">$this</span>-&gt;globalParams = <span class="php-keyword1">array</span>();
<a href="#1222" id="1222" class="l">1222: </a>        <span class="php-var">$selfParams</span> = <span class="php-keyword1">array</span>();
<a href="#1223" id="1223" class="l">1223: </a>
<a href="#1224" id="1224" class="l">1224: </a>        <span class="php-var">$params</span> = <span class="php-var">$this</span>-&gt;request-&gt;getParams();
<a href="#1225" id="1225" class="l">1225: </a>        <span class="php-keyword1">if</span> (<span class="php-var">$this</span>-&gt;isAjax()) {
<a href="#1226" id="1226" class="l">1226: </a>            <span class="php-var">$params</span> = <span class="php-var">$this</span>-&gt;request-&gt;getPost() + <span class="php-var">$params</span>;
<a href="#1227" id="1227" class="l">1227: </a>        }
<a href="#1228" id="1228" class="l">1228: </a>
<a href="#1229" id="1229" class="l">1229: </a>        <span class="php-keyword1">foreach</span> (<span class="php-var">$params</span> as <span class="php-var">$key</span> =&gt; <span class="php-var">$value</span>) {
<a href="#1230" id="1230" class="l">1230: </a>            <span class="php-var">$a</span> = <span class="php-keyword2">strlen</span>(<span class="php-var">$key</span>) &gt; <span class="php-num">2</span> ? <span class="php-keyword2">strrpos</span>(<span class="php-var">$key</span>, self::NAME_SEPARATOR, -<span class="php-num">2</span>) : <span class="php-keyword1">FALSE</span>;
<a href="#1231" id="1231" class="l">1231: </a>            <span class="php-keyword1">if</span> (<span class="php-var">$a</span> === <span class="php-keyword1">FALSE</span>) {
<a href="#1232" id="1232" class="l">1232: </a>                <span class="php-var">$selfParams</span>[<span class="php-var">$key</span>] = <span class="php-var">$value</span>;
<a href="#1233" id="1233" class="l">1233: </a>            } <span class="php-keyword1">else</span> {
<a href="#1234" id="1234" class="l">1234: </a>                <span class="php-var">$this</span>-&gt;globalParams[<span class="php-keyword2">substr</span>(<span class="php-var">$key</span>, <span class="php-num">0</span>, <span class="php-var">$a</span>)][<span class="php-keyword2">substr</span>(<span class="php-var">$key</span>, <span class="php-var">$a</span> + <span class="php-num">1</span>)] = <span class="php-var">$value</span>;
<a href="#1235" id="1235" class="l">1235: </a>            }
<a href="#1236" id="1236" class="l">1236: </a>        }
<a href="#1237" id="1237" class="l">1237: </a>
<a href="#1238" id="1238" class="l">1238: </a>        <span class="php-comment">// init &amp; validate $this-&gt;action &amp; $this-&gt;view
</span><a href="#1239" id="1239" class="l">1239: </a>        <span class="php-var">$this</span>-&gt;changeAction(<span class="php-keyword1">isset</span>(<span class="php-var">$selfParams</span>[self::ACTION_KEY]) ? <span class="php-var">$selfParams</span>[self::ACTION_KEY] : self::<span class="php-var">$defaultAction</span>);
<a href="#1240" id="1240" class="l">1240: </a>
<a href="#1241" id="1241" class="l">1241: </a>        <span class="php-comment">// init $this-&gt;signalReceiver and key 'signal' in appropriate params array
</span><a href="#1242" id="1242" class="l">1242: </a>        <span class="php-var">$this</span>-&gt;signalReceiver = <span class="php-var">$this</span>-&gt;getUniqueId();
<a href="#1243" id="1243" class="l">1243: </a>        <span class="php-keyword1">if</span> (!<span class="php-keyword1">empty</span>(<span class="php-var">$selfParams</span>[self::SIGNAL_KEY])) {
<a href="#1244" id="1244" class="l">1244: </a>            <span class="php-var">$param</span> = <span class="php-var">$selfParams</span>[self::SIGNAL_KEY];
<a href="#1245" id="1245" class="l">1245: </a>            <span class="php-var">$pos</span> = <span class="php-keyword2">strrpos</span>(<span class="php-var">$param</span>, <span class="php-quote">'-'</span>);
<a href="#1246" id="1246" class="l">1246: </a>            <span class="php-keyword1">if</span> (<span class="php-var">$pos</span>) {
<a href="#1247" id="1247" class="l">1247: </a>                <span class="php-var">$this</span>-&gt;signalReceiver = <span class="php-keyword2">substr</span>(<span class="php-var">$param</span>, <span class="php-num">0</span>, <span class="php-var">$pos</span>);
<a href="#1248" id="1248" class="l">1248: </a>                <span class="php-var">$this</span>-&gt;signal = <span class="php-keyword2">substr</span>(<span class="php-var">$param</span>, <span class="php-var">$pos</span> + <span class="php-num">1</span>);
<a href="#1249" id="1249" class="l">1249: </a>            } <span class="php-keyword1">else</span> {
<a href="#1250" id="1250" class="l">1250: </a>                <span class="php-var">$this</span>-&gt;signalReceiver = <span class="php-var">$this</span>-&gt;getUniqueId();
<a href="#1251" id="1251" class="l">1251: </a>                <span class="php-var">$this</span>-&gt;signal = <span class="php-var">$param</span>;
<a href="#1252" id="1252" class="l">1252: </a>            }
<a href="#1253" id="1253" class="l">1253: </a>            <span class="php-keyword1">if</span> (<span class="php-var">$this</span>-&gt;signal == <span class="php-keyword1">NULL</span>) { <span class="php-comment">// intentionally ==
</span><a href="#1254" id="1254" class="l">1254: </a>                <span class="php-var">$this</span>-&gt;signal = <span class="php-keyword1">NULL</span>;
<a href="#1255" id="1255" class="l">1255: </a>            }
<a href="#1256" id="1256" class="l">1256: </a>        }
<a href="#1257" id="1257" class="l">1257: </a>
<a href="#1258" id="1258" class="l">1258: </a>        <span class="php-var">$this</span>-&gt;loadState(<span class="php-var">$selfParams</span>);
<a href="#1259" id="1259" class="l">1259: </a>    }
<a href="#1260" id="1260" class="l">1260: </a>
<a href="#1261" id="1261" class="l">1261: </a>
<a href="#1262" id="1262" class="l">1262: </a>
<a href="#1263" id="1263" class="l">1263: </a>    <span class="php-comment">/**
</span><a href="#1264" id="1264" class="l">1264: </a><span class="php-comment">     * Pops parameters for specified component.
</span><a href="#1265" id="1265" class="l">1265: </a><span class="php-comment">     * @param  string  component id
</span><a href="#1266" id="1266" class="l">1266: </a><span class="php-comment">     * @return array
</span><a href="#1267" id="1267" class="l">1267: </a><span class="php-comment">     */</span>
<a href="#1268" id="1268" class="l">1268: </a>    <span class="php-keyword1">final</span> <span class="php-keyword1">public</span> <span class="php-keyword1">function</span> popGlobalParams(<span class="php-var">$id</span>)
<a href="#1269" id="1269" class="l">1269: </a>    {
<a href="#1270" id="1270" class="l">1270: </a>        <span class="php-keyword1">if</span> (<span class="php-keyword1">isset</span>(<span class="php-var">$this</span>-&gt;globalParams[<span class="php-var">$id</span>])) {
<a href="#1271" id="1271" class="l">1271: </a>            <span class="php-var">$res</span> = <span class="php-var">$this</span>-&gt;globalParams[<span class="php-var">$id</span>];
<a href="#1272" id="1272" class="l">1272: </a>            <span class="php-keyword1">unset</span>(<span class="php-var">$this</span>-&gt;globalParams[<span class="php-var">$id</span>]);
<a href="#1273" id="1273" class="l">1273: </a>            <span class="php-keyword1">return</span> <span class="php-var">$res</span>;
<a href="#1274" id="1274" class="l">1274: </a>
<a href="#1275" id="1275" class="l">1275: </a>        } <span class="php-keyword1">else</span> {
<a href="#1276" id="1276" class="l">1276: </a>            <span class="php-keyword1">return</span> <span class="php-keyword1">array</span>();
<a href="#1277" id="1277" class="l">1277: </a>        }
<a href="#1278" id="1278" class="l">1278: </a>    }
<a href="#1279" id="1279" class="l">1279: </a>
<a href="#1280" id="1280" class="l">1280: </a>
<a href="#1281" id="1281" class="l">1281: </a>
<a href="#1282" id="1282" class="l">1282: </a>    <span class="php-comment">/********************* flash session ****************d*g**/</span>
<a href="#1283" id="1283" class="l">1283: </a>
<a href="#1284" id="1284" class="l">1284: </a>
<a href="#1285" id="1285" class="l">1285: </a>
<a href="#1286" id="1286" class="l">1286: </a>    <span class="php-comment">/**
</span><a href="#1287" id="1287" class="l">1287: </a><span class="php-comment">     * Checks if a flash session namespace exists.
</span><a href="#1288" id="1288" class="l">1288: </a><span class="php-comment">     * @return bool
</span><a href="#1289" id="1289" class="l">1289: </a><span class="php-comment">     */</span>
<a href="#1290" id="1290" class="l">1290: </a>    <span class="php-keyword1">public</span> <span class="php-keyword1">function</span> hasFlashSession()
<a href="#1291" id="1291" class="l">1291: </a>    {
<a href="#1292" id="1292" class="l">1292: </a>        <span class="php-keyword1">return</span> !<span class="php-keyword1">empty</span>(<span class="php-var">$this</span>-&gt;params[self::FLASH_KEY])
<a href="#1293" id="1293" class="l">1293: </a>            &amp;&amp; <span class="php-var">$this</span>-&gt;getSession()-&gt;hasNamespace(<span class="php-quote">'Nette.Application.Flash/'</span> . <span class="php-var">$this</span>-&gt;params[self::FLASH_KEY]);
<a href="#1294" id="1294" class="l">1294: </a>    }
<a href="#1295" id="1295" class="l">1295: </a>
<a href="#1296" id="1296" class="l">1296: </a>
<a href="#1297" id="1297" class="l">1297: </a>
<a href="#1298" id="1298" class="l">1298: </a>    <span class="php-comment">/**
</span><a href="#1299" id="1299" class="l">1299: </a><span class="php-comment">     * Returns session namespace provided to pass temporary data between redirects.
</span><a href="#1300" id="1300" class="l">1300: </a><span class="php-comment">     * @return Nette\Web\SessionNamespace
</span><a href="#1301" id="1301" class="l">1301: </a><span class="php-comment">     */</span>
<a href="#1302" id="1302" class="l">1302: </a>    <span class="php-keyword1">public</span> <span class="php-keyword1">function</span> getFlashSession()
<a href="#1303" id="1303" class="l">1303: </a>    {
<a href="#1304" id="1304" class="l">1304: </a>        <span class="php-keyword1">if</span> (<span class="php-keyword1">empty</span>(<span class="php-var">$this</span>-&gt;params[self::FLASH_KEY])) {
<a href="#1305" id="1305" class="l">1305: </a>            <span class="php-var">$this</span>-&gt;params[self::FLASH_KEY] = <span class="php-keyword2">substr</span>(<span class="php-keyword2">md5</span>(<span class="php-keyword2">lcg_value</span>()), <span class="php-num">0</span>, <span class="php-num">4</span>);
<a href="#1306" id="1306" class="l">1306: </a>        }
<a href="#1307" id="1307" class="l">1307: </a>        <span class="php-keyword1">return</span> <span class="php-var">$this</span>-&gt;getSession(<span class="php-quote">'Nette.Application.Flash/'</span> . <span class="php-var">$this</span>-&gt;params[self::FLASH_KEY]);
<a href="#1308" id="1308" class="l">1308: </a>    }
<a href="#1309" id="1309" class="l">1309: </a>
<a href="#1310" id="1310" class="l">1310: </a>
<a href="#1311" id="1311" class="l">1311: </a>
<a href="#1312" id="1312" class="l">1312: </a>    <span class="php-comment">/********************* backend ****************d*g**/</span>
<a href="#1313" id="1313" class="l">1313: </a>
<a href="#1314" id="1314" class="l">1314: </a>
<a href="#1315" id="1315" class="l">1315: </a>
<a href="#1316" id="1316" class="l">1316: </a>    <span class="php-comment">/**
</span><a href="#1317" id="1317" class="l">1317: </a><span class="php-comment">     * @return Nette\Web\HttpRequest
</span><a href="#1318" id="1318" class="l">1318: </a><span class="php-comment">     */</span>
<a href="#1319" id="1319" class="l">1319: </a>    <span class="php-keyword1">protected</span> <span class="php-keyword1">function</span> getHttpRequest()
<a href="#1320" id="1320" class="l">1320: </a>    {
<a href="#1321" id="1321" class="l">1321: </a>        <span class="php-keyword1">return</span> Environment::getHttpRequest();
<a href="#1322" id="1322" class="l">1322: </a>    }
<a href="#1323" id="1323" class="l">1323: </a>
<a href="#1324" id="1324" class="l">1324: </a>
<a href="#1325" id="1325" class="l">1325: </a>
<a href="#1326" id="1326" class="l">1326: </a>    <span class="php-comment">/**
</span><a href="#1327" id="1327" class="l">1327: </a><span class="php-comment">     * @return Nette\Web\HttpResponse
</span><a href="#1328" id="1328" class="l">1328: </a><span class="php-comment">     */</span>
<a href="#1329" id="1329" class="l">1329: </a>    <span class="php-keyword1">protected</span> <span class="php-keyword1">function</span> getHttpResponse()
<a href="#1330" id="1330" class="l">1330: </a>    {
<a href="#1331" id="1331" class="l">1331: </a>        <span class="php-keyword1">return</span> Environment::getHttpResponse();
<a href="#1332" id="1332" class="l">1332: </a>    }
<a href="#1333" id="1333" class="l">1333: </a>
<a href="#1334" id="1334" class="l">1334: </a>
<a href="#1335" id="1335" class="l">1335: </a>
<a href="#1336" id="1336" class="l">1336: </a>    <span class="php-comment">/**
</span><a href="#1337" id="1337" class="l">1337: </a><span class="php-comment">     * @return Nette\Web\HttpContext
</span><a href="#1338" id="1338" class="l">1338: </a><span class="php-comment">     */</span>
<a href="#1339" id="1339" class="l">1339: </a>    <span class="php-keyword1">protected</span> <span class="php-keyword1">function</span> getHttpContext()
<a href="#1340" id="1340" class="l">1340: </a>    {
<a href="#1341" id="1341" class="l">1341: </a>        <span class="php-keyword1">return</span> Environment::getHttpContext();
<a href="#1342" id="1342" class="l">1342: </a>    }
<a href="#1343" id="1343" class="l">1343: </a>
<a href="#1344" id="1344" class="l">1344: </a>
<a href="#1345" id="1345" class="l">1345: </a>
<a href="#1346" id="1346" class="l">1346: </a>    <span class="php-comment">/**
</span><a href="#1347" id="1347" class="l">1347: </a><span class="php-comment">     * @return Application
</span><a href="#1348" id="1348" class="l">1348: </a><span class="php-comment">     */</span>
<a href="#1349" id="1349" class="l">1349: </a>    <span class="php-keyword1">public</span> <span class="php-keyword1">function</span> getApplication()
<a href="#1350" id="1350" class="l">1350: </a>    {
<a href="#1351" id="1351" class="l">1351: </a>        <span class="php-keyword1">return</span> Environment::getApplication();
<a href="#1352" id="1352" class="l">1352: </a>    }
<a href="#1353" id="1353" class="l">1353: </a>
<a href="#1354" id="1354" class="l">1354: </a>
<a href="#1355" id="1355" class="l">1355: </a>
<a href="#1356" id="1356" class="l">1356: </a>    <span class="php-comment">/**
</span><a href="#1357" id="1357" class="l">1357: </a><span class="php-comment">     * @return Nette\Web\Session
</span><a href="#1358" id="1358" class="l">1358: </a><span class="php-comment">     */</span>
<a href="#1359" id="1359" class="l">1359: </a>    <span class="php-keyword1">protected</span> <span class="php-keyword1">function</span> getSession(<span class="php-var">$namespace</span> = <span class="php-keyword1">NULL</span>)
<a href="#1360" id="1360" class="l">1360: </a>    {
<a href="#1361" id="1361" class="l">1361: </a>        <span class="php-keyword1">return</span> Environment::getSession(<span class="php-var">$namespace</span>);
<a href="#1362" id="1362" class="l">1362: </a>    }
<a href="#1363" id="1363" class="l">1363: </a>
<a href="#1364" id="1364" class="l">1364: </a>
<a href="#1365" id="1365" class="l">1365: </a>
<a href="#1366" id="1366" class="l">1366: </a>    <span class="php-comment">/**
</span><a href="#1367" id="1367" class="l">1367: </a><span class="php-comment">     * @return Nette\Web\User
</span><a href="#1368" id="1368" class="l">1368: </a><span class="php-comment">     */</span>
<a href="#1369" id="1369" class="l">1369: </a>    <span class="php-keyword1">protected</span> <span class="php-keyword1">function</span> getUser()
<a href="#1370" id="1370" class="l">1370: </a>    {
<a href="#1371" id="1371" class="l">1371: </a>        <span class="php-keyword1">return</span> Environment::getUser();
<a href="#1372" id="1372" class="l">1372: </a>    }
<a href="#1373" id="1373" class="l">1373: </a>
<a href="#1374" id="1374" class="l">1374: </a>}
<a href="#1375" id="1375" class="l">1375: </a></code></pre>

	<div id="footer">
		Nette Framework API documentation generated by <a href="http://apigen.org">ApiGen</a>
	</div>
</div>
</body>
</html>
